예제 #1
0
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);
}
예제 #2
0
/*
 * 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;
	}
}
예제 #3
0
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);
}
예제 #4
0
/*
 * 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;
	}
}