int ipcFix3G() { //ipctool 09 00 35 00 05 01 03 82 00 //ipc header unsigned char data[] = { 0x09, 0x00, 0x35, 0x00, 0x05, 0x01, 0x03, 0x82, 0x00 }; return ipc_send_data( data, sizeof(data), MODEM_TO_PDA); }
/* * Code common to V1 and V2 */ static void upload_handler(struct mg_connection *nc, int ev, void *p) { struct mg_http_multipart_part *mp; struct file_upload_state *fus; switch (ev) { case MG_EV_HTTP_PART_BEGIN: mp = (struct mg_http_multipart_part *) p; fus = (struct file_upload_state *) calloc(1, sizeof(*fus)); if (fus == NULL) { mg_http_send_error(nc, 500, "Out of memory"); break; } fus->fd = ipc_inst_start_ext(SOURCE_WEBSERVER, strlen(mp->file_name), mp->file_name, false); if (fus->fd < 0) { mg_http_send_error(nc, 500, "Failed to queue command"); free(fus); break; } mp->user_data = fus; break; case MG_EV_HTTP_PART_DATA: mp = (struct mg_http_multipart_part *) p; fus = (struct file_upload_state *) mp->user_data; if (!fus) break; ipc_send_data(fus->fd, (char *) mp->data.p, mp->data.len); fus->len += mp->data.len; break; case MG_EV_HTTP_PART_END: mp = (struct mg_http_multipart_part *) p; fus = (struct file_upload_state *) mp->user_data; if (!fus) break; ipc_end(fus->fd); mg_send_response_line(nc, 200, "Content-Type: text/plain\r\n" "Connection: close"); mg_send(nc, "\r\n", 2); mg_printf(nc, "Ok, %s - %d bytes.\r\n", mp->file_name, (int) fus->len); nc->flags |= MG_F_SEND_AND_CLOSE; mp->user_data = NULL; free(fus); break; } }
int ipcFixSMS() { unsigned char data[254]; //fe 00 00 ff 04 06 01 00 00 03 00 02 ..... //ipc header + data unsigned char data1[]={0x00, 0x00, 0x00, 0xff, 0x04, 0x06, 0x01, 0x00, 0x00, 0x03, 0x00, 0x02}; memset(data, 0, sizeof(data)); memcpy(&data, data1, sizeof(data1)); return ipc_send_data( data, sizeof(data), PDA_TO_MODEM); }
/* * These functions are for V1 of the protocol */ static void upload_handler_v1(struct mg_connection *nc, int ev, void *p) { struct mg_str *filename, *data; struct http_message *hm; size_t length; char buf[16]; int fd; switch (ev) { case MG_EV_HTTP_REQUEST: hm = (struct http_message *) p; filename = mg_get_http_header(hm, "X_FILENAME"); if (filename == NULL) { mg_http_send_error(nc, 403, NULL); return; } data = mg_get_http_header(hm, "Content-length"); if (data == NULL || data->len >= ARRAY_SIZE(buf)) { mg_http_send_error(nc, 403, NULL); return; } memcpy(buf, data->p, data->len); buf[data->len] = '\0'; length = strtoul(data->p, NULL, 10); if (length == 0) { mg_http_send_error(nc, 403, NULL); return; } fd = ipc_inst_start_ext(SOURCE_WEBSERVER, filename->len, filename->p, false); ipc_send_data(fd, (char *) hm->body.p, hm->body.len); ipc_end(fd); mg_send_response_line(nc, 200, "Content-Type: text/plain\r\n" "Connection: close"); mg_send(nc, "\r\n", 2); mg_printf(nc, "Ok, %.*s - %d bytes.\r\n", (int) filename->len, filename->p, (int) length); nc->flags |= MG_F_SEND_AND_CLOSE; break; default: upload_handler(nc, ev, p); break; } }