Exemple #1
0
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;
    }
}
Exemple #2
0
 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;
	}
}
Exemple #3
0
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);
	}
}