//========================= int tcp_write(lua_State* L) { tcp_info_t* p = ((tcp_info_t*)luaL_checkudata(L, 1, LUA_TCP)); int len; char* str = (char *)luaL_checklstring(L, 2, &len); lua_pushinteger(L, vm_tcp_write(p->handle, str, len)); return 1; }
//----------------------------------------------------------------------------------- static void __tcp_callback(VM_TCP_HANDLE handle, VM_TCP_EVENT event, void* user_data) { tcp_info_t* p = (tcp_info_t*)user_data; lua_State* L = p->L; lua_rawgeti(L, LUA_REGISTRYINDEX, p->cb_ref); if ((lua_type(L, -1) != LUA_TFUNCTION) && (lua_type(L, -1) != LUA_TLIGHTFUNCTION)) { // * BAD CB function reference lua_remove(L, -1); if (event == VM_TCP_EVENT_CAN_READ) { printf("[TCP] Read.\n"); int nread = -1; char buf[256]; while (nread > 0) { nread = vm_tcp_read(handle, buf, 254); if (nread < 0) { break; } else if (nread > 0) { buf[nread] = '\n'; buf[nread+1] = '\0'; printf("%s\n", buf); } } } else if (event == VM_TCP_EVENT_CONNECTED) { printf("[TCP] Connected.\n"); if (send_buf != NULL) { int nwrt = vm_tcp_write(handle, send_buf, strlen(send_buf)); printf("[TCP] Sent: %d\n", nwrt); } } else if (event == VM_TCP_EVENT_PIPE_CLOSED) { printf("[TCP] Closed.\n"); if (send_buf != NULL) { vm_free(send_buf); } } else printf("[TCP] Event: %d\n", event); } else { lua_pushlightuserdata(L, p); luaL_getmetatable(L, LUA_TCP); lua_setmetatable(L, -2); lua_pushinteger(L, (int)event); lua_call(L, 2, 0); } }
boolean LTcpClient::wifiWrite(void *userData) { vm_log_info("wifiWrite"); LTcpReadWriteContext *pContext = (LTcpReadWriteContext*)userData; if (pContext->serverHandle != -1) { pContext->lenProcessed = vm_soc_svr_send(pContext->serverHandle, pContext->handle, pContext->buf, pContext->len); } else { pContext->lenProcessed = vm_tcp_write(pContext->handle, pContext->buf, pContext->len); } vm_log_info("wifiWrite wrote %d", pContext->lenProcessed); return true; }
static void _vm_preload_try_query(vm_preload_ctx_t * ctx_p) { VMCHAR http_header[BUFFER_LEN] = {0}; VMCHAR http_body[BUFFER_LEN] = {0}; VMINT ret = 0; VMINT written = 0; vm_common_t head = {E_PRELOAD_QUERYING, NULL}; MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3114 ); // vm_preload_cancel check if (NULL == ctx_p->cb) { MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3117 ); return; } //memset(ctx_p->path, 0, sizeof(ctx_p->path)); //vm_wstrcpy(ctx_p->path, (VMWSTR)data); //app_id=%d; ver=\"%s\"; imsi=\"%s\"; imei=\"%s\"; sc=\"%s\"; skb=\"%s\"; stch=\"%s\"; sgs=\"%s\"; scs=\"%s\"; w=%d; h=%d\r\n\ // http body head.state = E_PRELOAD_QUERYING; head.user_data = ctx_p->user_data; PRELOAD_PMNG_WRAP_CALLBACK(ctx_p->p_hdl, ctx_p->cb, ctx_p->res_id, (void*)&head); // vm_preload_cancel check if (NULL == ctx_p->cb) { return; } MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3130 ); #ifndef _POST_ // http header if (ctx_p->query_info.ua[0]) { sprintf(http_header, "GET %s?%s HTTP/1.1\r\nHost: %s:%d\r\n" #ifdef WIN32 //"Proxy-Authorization: Basic TXRrODAwMjM6MWFjNmIxMDEx\r\n" #endif "User-Agent: %s\r\n" "Accept: %s\r\n" "Accept-Language: %s\r\n\r\n", ctx_p->url, /* ctx_p->query_info.app_id, ctx_p->query_info.ver, ctx_p->query_info.imsi, ctx_p->query_info.imei, */ ctx_p->query_info.ua, ctx_p->host, ctx_p->port, (VMCHAR*)applib_inet_get_user_agent_string(), "*/*", "en"); } else { sprintf(http_header, "GET %s HTTP/1.1\r\nHost: %s:%d\r\n" "User-Agent: %s\r\n" "Accept: %s\r\n" "Accept-Language: %s\r\n\r\n", ctx_p->url, /* ctx_p->query_info.app_id, ctx_p->query_info.ver, ctx_p->query_info.imsi, ctx_p->query_info.imei, */ ctx_p->host, ctx_p->port, (VMCHAR*)applib_inet_get_user_agent_string(), "*/*", "en"); } #else //app_id=%d; ver=\"%s\"; imsi=\"%s\"; imei=\"%s\"; sc=\"%s\"; skb=\"%s\"; stch=\"%s\"; sgs=\"%s\"; scs=\"%s\"; w=%d; h=%d\r\n\r\n //app_id: %d\r\nver: %s\r\nimsi: %s\r\nimei: %s\r\nsc: %s\r\nskb: %s\r\nstch: %s\r\nsgs: %s\r\nscs: %s\r\nw: %d\r\nh: %d\r\n\r\n /* sprintf(http_body, "app_id=%d&ver=%s&imsi=%s&imei=%s&ua=%s&w=128&h=320&asdfasdf=asdfasdf&hahsdj=asdf&sss=fff", ctx_p->query_info.app_id, ctx_p->query_info.ver, ctx_p->query_info.imsi, ctx_p->query_info.imei, ctx_p->query_info.ua);*/ strcpy(http_body,ctx_p->query_info.ua); sprintf(http_header, "POST %s HTTP/1.1\r\nHost: %s:%d\r\nProxy-Authorization: Basic TXRrODAwMjM6MWFjNmIxMDEx\r\n\ User-Agent: %s\r\n\ Accept: %s\r\n\ Accept-Language: %s\r\n\ Accept-Charset: %s\r\n\ Accept-Encoding: %s\r\n\ Connection: %s\r\n\ Content-Type: %s\r\n\ Content-Length: %d\r\n\r\n", ctx_p->url, ctx_p->host, ctx_p->port, (VMCHAR*)applib_inet_get_user_agent_string(), "*/*", "zh_CN,zh", "UTF-8,ISO-8859-1,US-ASCII,ISO-10646-UCS-2;q=0.6", "identity", "Keep-Alive", "form-data/application/x-www-form-urlencoded", strlen(http_body)); strcat(http_header, http_body); #endif while (0 < (ret = vm_tcp_write(ctx_p->soc_id, http_header + written, strlen(http_header) - written))) { written += ret; MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3190 , written); } #if 0 /* under construction !*/ /* under construction !*/ /* under construction !*/ /* under construction !*/ /* under construction !*/ /* under construction !*/ #endif MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3200 , ret); MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3201 ); }
static VMINT _vm_preload_try_download(vm_preload_ctx_t * ctx_p) { VMCHAR *http_header; VMINT ret = 0; VMINT written = 0; VMINT bufSize = 0; ASSERT(ctx_p); if (0 > ctx_p->soc_id && ctx_p->update) { // host is changed. if (0 == strstr(ctx_p->url, ctx_p->host)) { VMINT nspan = 7; // http:// is 7 bytes for(nspan = 7; ctx_p->url[nspan] != '\0'; nspan ++) { if (ctx_p->url[nspan] == ':') { ctx_p->port = atoi(&ctx_p->url[nspan + 1]); break; } if (ctx_p->url[nspan] == '/') break; } memset(ctx_p->host, 0, sizeof(ctx_p->host)); memcpy(ctx_p->host, &ctx_p->url[7], nspan - 7); } #if 1 vm_preload_do_connection(ctx_p, 2); #else /* under construction !*/ #endif if (0 > ctx_p->soc_id) { MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3023 ); return -4; } MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3026 ); ctx_p->update = 2; return 0; } http_header = vm_calloc(BUFFER_LEN); if (NULL == http_header) return -5; // http header sprintf(http_header, "GET %s HTTP/1.1\r\nHost: %s:%d\r\n" #ifdef WIN32 //"Proxy-Authorization: Basic TXRrODAwMjM6MWFjNmIxMDEx\r\n" #endif "User-Agent: %s\r\n" "Accept: %s\r\n" "Accept-Language: %s\r\n\r\n", ctx_p->url, ctx_p->host, ctx_p->port, (VMCHAR*)applib_inet_get_user_agent_string(), "*/*", "en"); MMI_TRACE(MMI_MRE_TRC_MOD_VMSOCK, TRC_MRE_VMSOCK_3051 , ctx_p->url, ctx_p->port, ctx_p->host); while (0 < (ret = vm_tcp_write(ctx_p->soc_id, http_header + written, strlen(http_header) - written))) { written += ret; } vm_free(http_header); return written; }