void gr_module_proc_tcp( gr_tcp_req_t * req, gr_proc_ctxt_t * ctxt, int * processed_len ) { gr_module_t * module = (gr_module_t *)g_ghost_rocket_global.module; if ( GR_PACKAGE_HTTP_REQ == req->check_ctxt.package_type || GR_PACKAGE_HTTP_REPLY == req->check_ctxt.package_type ) { http_proc( req->buf, req->buf_len, ctxt, & req->parent->buddy, processed_len ); return; } if ( NULL != module && NULL != module->proc_binary ) { module->proc_binary( req->buf, req->buf_len, ctxt, & req->parent->buddy, processed_len ); } else { // 没实现二进制数据包处理,我只能断连接了 * processed_len = -1; } }
int cache_data_to_svr(char *url, trans_info_t *info) { FILE *iSvrResp = NULL; FILE *fStream = NULL; char head[20480]; int size = 0; int len=0; char *buffer = NULL, *tmp=NULL; int j; head[0]=0; if(info->opt->is_encrypt == 1) { tmp=(char *)malloc(bufferSize(info->cache)+1024); buffer = tmp; size=bufferEncrypt((char *)info->cache->buffer, bufferSize(info->cache), \ buffer+8, bufferSize(info->cache)+1024, info->opt->SN, strlen(info->opt->SN)); ((int*)buffer)[1] = bufferSize(info->cache); strcpy(buffer,"LZO1"); size += 8; } else { buffer = (char *)info->cache->buffer; size = bufferSize(info->cache); } if( NULL != info->file_path) { fStream = fopen(info->file_path,"rb"); if (fStream != NULL) { len = file_get_length(fStream); } buffer[size]=0; size++; } /*如果发送数据后,没有收到服务器确认信息,将重发,三次都失败后,认为发送失败*/ for (j=0; j<3; j++) { iSvrResp = http_proc(url,head,buffer,size, fStream, \ ((size+len)>10*1024)?info->opt->websvr_time_out*4:info->opt->websvr_time_out,\ info->opt->send_buf_size); if (svr_res_proc(iSvrResp,info,head)) { printf("[PUSH SDK] UPLOAD %s(%d) INFO SUCESS\n\n",info->list->table_name,info->count); if (info->file_path != NULL) { printf("[PUSH SDK] UPLOAD %s(%s) FILE SUCESS\n\n",info->list->table_name,info->file_path); } pipe_write_to_parent_cmd(CHILD_CMD_ONLINE); break; } printf("[PUSH SDK] TRANS %s (%d)TIMES FAILED\n\n",info->list->table_name,j+1); msleep(300*(j+1)); } if (fStream) { fclose(fStream); } if (tmp != NULL) { free(tmp); } if (j > 2) { pipe_write_to_parent_cmd(CHILD_CMD_OFFLINE); return 0; } else { return 1; } }
int main(int argc, char * argv[]) { std::cout << "Simple static web server." << std::endl << "Use --help for more information." << std::endl; if(argc == 2) { if(strcmp(argv[1], "--help") == 0) { help(argv[0]); return 0; } else if(strcmp(argv[1], "--daemon") == 0) { int pid = fork(); switch(pid) { case -1 : std::cerr << "fork() failed!" << std::endl; return -1; break; case 0 : syslog(LOG_DAEMON, "Simple static server started as daemon at 8080 port."); std::cout << "Start at 8080 port." << std::endl; setsid(); close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); break; default: return 0; break; } } else { std::cout << "Invalid argument " << argv[1] << std::endl; return 0; } } signal(SIGTERM, sigterm_handler); struct sockaddr_in serv_addr, client_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(8080); int serv_sock, client_sock; if((serv_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { std::cerr << "socket() failed" << std::endl; return -1; } if(bind(serv_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { std::cerr << "bind() failed!" << std::endl; return -1; } if(listen(serv_sock, 1) < 0) { std::cerr << "listen() failed" << std::endl; return -1; } std::cout << "Server started at port 8080." << std::endl; socklen_t client_addr_size; while(true) { client_addr_size = sizeof(client_addr); client_sock = accept(serv_sock, (struct sockaddr *) &client_addr, &client_addr_size); if(client_sock < 0) { std::cerr << "accept() failed" << std::endl; return -1; } http_proc(client_sock); close(client_sock); } }