Skip to content
This repository was archived by the owner on Oct 28, 2023. It is now read-only.

Commit c16612e

Browse files
committed
extmod/modwebrepl: Factor out "GET" iteration to write_file_chunk().
1 parent 7fb3147 commit c16612e

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

extmod/modwebrepl.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,22 @@ STATIC mp_obj_t webrepl_make_new(const mp_obj_type_t *type, size_t n_args, size_
111111
return o;
112112
}
113113

114+
STATIC int write_file_chunk(mp_obj_webrepl_t *self) {
115+
const mp_stream_p_t *file_stream =
116+
mp_get_stream_raise(self->cur_file, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE | MP_STREAM_OP_IOCTL);
117+
byte readbuf[2 + 256];
118+
int err;
119+
mp_uint_t out_sz = file_stream->read(self->cur_file, readbuf + 2, sizeof(readbuf) - 2, &err);
120+
if (out_sz == MP_STREAM_ERROR) {
121+
return out_sz;
122+
}
123+
readbuf[0] = out_sz;
124+
readbuf[1] = out_sz >> 8;
125+
DEBUG_printf("webrepl: Sending %d bytes of file\n", out_sz);
126+
write_webrepl(self->sock, readbuf, 2 + out_sz);
127+
return out_sz;
128+
}
129+
114130
STATIC void handle_op(mp_obj_webrepl_t *self) {
115131
mp_obj_t open_args[2] = {
116132
mp_obj_new_str(self->hdr.fname, strlen(self->hdr.fname), false),
@@ -122,8 +138,6 @@ STATIC void handle_op(mp_obj_webrepl_t *self) {
122138
}
123139

124140
self->cur_file = mp_builtin_open(2, open_args, (mp_map_t*)&mp_const_empty_map);
125-
const mp_stream_p_t *file_stream =
126-
mp_get_stream_raise(self->cur_file, MP_STREAM_OP_READ | MP_STREAM_OP_WRITE | MP_STREAM_OP_IOCTL);
127141

128142
#if 0
129143
struct mp_stream_seek_t seek = { .offset = self->hdr.offset, .whence = 0 };
@@ -137,17 +151,11 @@ STATIC void handle_op(mp_obj_webrepl_t *self) {
137151
if (self->hdr.type == PUT_FILE) {
138152
self->data_to_recv = self->hdr.size;
139153
} else if (self->hdr.type == GET_FILE) {
140-
byte readbuf[2 + 256];
141-
int err;
142154
// TODO: It's not ideal that we block connection while sending file
143155
// and don't process any input.
144156
while (1) {
145-
mp_uint_t out_sz = file_stream->read(self->cur_file, readbuf + 2, sizeof(readbuf) - 2, &err);
157+
mp_uint_t out_sz = write_file_chunk(self);
146158
assert(out_sz != MP_STREAM_ERROR);
147-
readbuf[0] = out_sz;
148-
readbuf[1] = out_sz >> 8;
149-
DEBUG_printf("webrepl: Sending %d bytes of file\n", out_sz);
150-
write_webrepl(self->sock, readbuf, 2 + out_sz);
151159
if (out_sz == 0) {
152160
break;
153161
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy