Ejemplo n.º 1
0
TEST(http, async_reuse_connect) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  settings.callbacks.on_message_complete = &on_message_complete_muti_write_async;
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(hello_world_response));
  ASSERT_EQ( 0, strcmp(buf, hello_world_response));


  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(hello_world_response));
  ASSERT_EQ( 0, strcmp(buf, hello_world_response));

  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 2
0
void send_file(int sockfd,char* filename){
	data d;
	bzero(&d,sizeof(d));
	d.len=0-strlen(filename);
	strcpy(d.buf,filename);
	send_n(sockfd,(char*)&d,4+(0-d.len));//send filename
	
	int fd;
	fd=open(filename,O_RDONLY);
	if(-1==fd){
		perror("send_file open");
		exit(-1);
	}
	
	int ret;
	while(bzero(&d,sizeof(d)),(d.len=read(fd,d.buf,sizeof(d.buf)))>0){
		d.len=0-d.len;
		ret=send_n(sockfd,(char*)&d,4+(0-d.len));
		if(-1==ret){
			printf("send_n failed\n");
			exit(-1);
		}
	}
	send_n(sockfd,(char*)&d.len,sizeof(int));
	close(fd);
}
Ejemplo n.º 3
0
TEST(http, headers_count_to_large) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, GET_REQUEST, strlen(GET_REQUEST)));
  for(s =0; s < 250; s ++) {
    send_n(sock, "h: 3\r\n", 6);
  }
  send_n(sock, "\r\n", 2);

  s = max_recv(sock, buf, 2048, 200 * RECV_TIMEOUT);
  ASSERT_EQ( s, 0);
  closesocket(sock);

  log_buf.str[log_buf.len] = 0;
  ASSERT_STREQ("parse error: header length too large.", log_buf.str);

  WEB_STOP();
}
Ejemplo n.º 4
0
int send_file(int sfd)
{
	data d;
	bzero(&d,sizeof(d));
	d.len = strlen(DOWNLOAD);
	strcpy(d.buf,DOWNLOAD);
	send_n(sfd,(char*)&d,4+d.len);
	int fd;
	fd = open(DOWNLOAD,O_RDONLY);
	if(-1 == fd)
	{
		perror("open");
		exit(-1);
	}
	int ret;
	while(bzero(&d,sizeof(d)),(d.len = read(fd,d.buf,sizeof(d.buf)))>0)
	{
		ret = send_n(sfd,(char*)&d,4+d.len);
		if(-1 == ret)
	{
			printf("send_n filed\n");
			exit(-1);
		}
		printf("ret = %d\n",ret);
	}
	int flag = 0;
	send_n(sfd,(char*)&flag,sizeof(int));
	close(sfd);
	return 0;
}
Ejemplo n.º 5
0
TEST(http, large_headers) {
  // large_headers will realloc memory while reading headers, and relocate buffers
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;
  int              i;

  WEB_INIT();
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  for(i =0; i < 3; i ++) {
    ASSERT_EQ(true, send_n(sock, GET_REQUEST, strlen(GET_REQUEST)));
    for(s =0; s < 200; s ++) {
      send_n(sock, "h234567890: 345678\r\n", 20);
    }
    send_n(sock, "\r\n", 2);

    s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
    ASSERT_EQ( s, strlen(hello_world_response));
    ASSERT_EQ( 0, strcmp(buf, hello_world_response));
  }
  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 6
0
TEST(http, headers_count_too_large_at_second_request) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);

  ASSERT_EQ(true, send_n(sock, GET_REQUEST "\r\n" GET_MINI_REQUEST HEAD_MINI_SIMPLE_X_200 HEAD_MINI_SIMPLE_X_50 HEAD_MINI_SIMPLE_X_10 HEAD_MINI_SIMPLE_X_10 "\r\n",
                         strlen(GET_REQUEST "\r\n" GET_MINI_REQUEST HEAD_MINI_SIMPLE_X_200 HEAD_MINI_SIMPLE_X_50 HEAD_MINI_SIMPLE_X_10 HEAD_MINI_SIMPLE_X_10 "\r\n")));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(hello_world_response));
  ASSERT_EQ( 0, strcmp(buf, hello_world_response));

  closesocket(sock);

  WEB_STOP();


  log_buf.str[log_buf.len] = 0;
  ASSERT_STREQ("parse error: header length too large.", log_buf.str);
}
Ejemplo n.º 7
0
TEST(http, async_check_writing) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  shttp_assert_ctx = &assert_buf;
  shttp_assert_cb = &on_assert;
  settings.callbacks.on_message_complete = &on_message_complete_async_check_is_writing;
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  //ASSERT_EQ( s, strlen(hello_world_response));
  //ASSERT_EQ( 0, strcmp(buf, hello_world_response));
  closesocket(sock);

  WEB_STOP();

  assert_buf.str[assert_buf.len] = 0;
  ASSERT_STREQ("0 == shttp_atomic_read32(&conn_outgoing(conn).is_writing)", assert_buf.str);
}
Ejemplo n.º 8
0
void send_file(int sfd)
{
	int ret;
	data_t buf; // 要发送的结构体名字叫buf,buf包含成员长度len,buf[1000]
	buf.len=strlen(DOWN_FILE); // "file" 这个名字的长度就是4 ,“wangdao”就是7,这里的buf.len 就是buf.buf的长度
	strcpy(buf.buf,DOWN_FILE);  //copy the name of the file
                                  	
	ret=send(sfd,&buf,buf.len+4,0);  //发送文件名(4代表的是结构体的int len,为什么不包含char数组,因为可以从前面开始数,后面都是0,就不要了,所以不用传)
	if(-1==ret)
	{
		perror("send1");
		return;
	}
	int fd=open(DOWN_FILE,O_RDONLY);
	if(-1==fd)
	{
		perror("open");
		return;	
	}
	while(bzero(&buf,sizeof(buf)),(buf.len=read(fd,buf.buf,sizeof(buf.buf)))>0)
	{
		send_n(sfd,(char*)&buf,buf.len+4);		
	}
	bzero(&buf,sizeof(buf));
	int flag=0;
	buf.len=sizeof(int);
	memcpy(buf.buf,&flag,4);  // 把flag的地址发给buf.buf ????
	send(sfd,&buf,buf.len+4,0); // 发送结束符
	close(sfd);
	return;
}
Ejemplo n.º 9
0
void send_file(int sfd)
{
	int ret;
	data_t buf;
	buf.len=strlen(DOWN_FILE);
	strcpy(buf.buf,DOWN_FILE);
	ret=send(sfd,&buf, buf.len+4,0);//发送文件名	
	if(-1==ret)
	{
		perror("send1");
		return;
	}
	int fd=open(DOWN_FILE,O_RDONLY);
	if(-1==fd)
	{
		perror("open");
		return;
	}
	while(bzero(&buf,sizeof(buf)),(buf.len=read(fd,buf.buf,sizeof(buf.buf))) > 0)
	{
		send_n(sfd,(char*)&buf,buf.len+4);		
	}
	bzero(&buf,sizeof(buf));
	int flag=0;
	buf.len=sizeof(int);
	memcpy(buf.buf,&flag,4);
	send(sfd,&buf, buf.len+4,0);//发送结束符	
	close(sfd);
	return;
}
Ejemplo n.º 10
0
extern "C" void user_main() {
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);

    osKernelInitialize();
    osKernelStart();

    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);

    key_event_init();
    keymat_init();
    keymat_callback = key_event_handler;
    keymat_start();

    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);

    while (1) {
        osEvent ose = osMailGet(key_events, osWaitForever);
        if (ose.status == osEventMail) {
            KeyEvent* e = (KeyEvent*)ose.value.p;

            // NOTE: MIDI handling is hardcoded for now
            buf[0] = (e->state ? 0x90 : 0x80); // use ch0
            buf[1] = e->keycode;
            buf[2] = 100; // use hard-coded velocity

            osMailFree(key_events, e);

            send_n(3); // blocking call
        }
    }
}
Ejemplo n.º 11
0
void send_file(int sfd)
{
	file_t dbuf;
	int ret;
	bzero(&dbuf,sizeof(dbuf));
	strcpy(dbuf.buf,FILE_NAME);
	dbuf.len=strlen(dbuf.buf);
	ret=send(sfd,(void*)&dbuf,4+dbuf.len,MSG_CONFIRM);
	if(-1==ret)
	{
		perror("send_file_name");
		exit(-1);
	}
	int fd;
	fd=open(FILE_NAME,O_RDONLY);
	if(-1==fd)
	{
		perror("open");
		exit(-1);
	}
	while(bzero(&dbuf,sizeof(dbuf)),(dbuf.len=read(fd,dbuf.buf,sizeof(dbuf.buf)))>0)
	{
		printf("the dbuf.len is %d\n",dbuf.len);
		ret=send_n(sfd,(char*)&dbuf,4+dbuf.len);
		if(-1==ret)
		{
			perror("send_file_data");
			exit(-1);
		}
	}
	int flag=0;//发送结束标志给客户端
	ret=send(sfd,(void*)&flag,sizeof(int),MSG_CONFIRM);
	close(sfd);
}
Ejemplo n.º 12
0
int	IOSocket::send(const char* buf,int size)
{
	if ( m_sMessages.space() < size )
	{
		send_n();
	}

	return m_sMessages.put(buf,size);
}
Ejemplo n.º 13
0
TEST(http, pipeline_request_while_two_read) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, pipeline_requests, strlen(pipeline_requests)-12));
  ASSERT_EQ(true, send_n(sock, pipeline_requests + (strlen(pipeline_requests)-12), 12));

  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( 0, strncmp(buf, hello_world_response, strlen(hello_world_response)));
  ASSERT_EQ( 0, strncmp(buf + strlen(hello_world_response),
                        hello_world_response, strlen(hello_world_response)));
  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 14
0
TEST(http, muti_write) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(hello_world_response));
  ASSERT_EQ( 0, strcmp(buf, hello_world_response));
  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 15
0
TEST(http, async_empty_message) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  settings.callbacks.on_message_complete = &on_message_complete_with_empty_async;
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(EMPTY_REPONSE));
  ASSERT_EQ( 0, strcmp(buf, EMPTY_REPONSE));
  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 16
0
int TCPSockStream::connect(const char *host,int port,long timeout)
{
	int ret;
	unsigned char buf[1];
	close();
#ifdef WIN32
	sock_ = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
#else
	sock_ = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
#endif 
	if(sock_ == INVALID_SOCKET)
		return -1;
	setnonblocking(1);
	ret = do_connect(host,port);
	if(ret)
		return -1;

	return send_n(buf,0,timeout);
}
Ejemplo n.º 17
0
TEST(http, format_realloc) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[20480];
  size_t           s;

  WEB_INIT();
  settings.callbacks.on_message_complete = &on_message_complete_format_realloc;
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 20480, RECV_TIMEOUT);
  ASSERT_EQ( s, strlen(head_abc_x_35_hello_world_response_x_52_str));
  ASSERT_EQ( 0, strcmp(buf, head_abc_x_35_hello_world_response_x_52_str));
  closesocket(sock);

  WEB_STOP();
}
Ejemplo n.º 18
0
TEST(http, large_headers_at_second_request) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);

  ASSERT_EQ(true, send_n(sock, GET_REQUEST "\r\n" GET_REQUEST HEAD_SIMPLE_X_100 "\r\n",
                         strlen(GET_REQUEST "\r\n" GET_REQUEST HEAD_SIMPLE_X_100 "\r\n")));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, 2*strlen(hello_world_response));
  ASSERT_EQ( 0, strcmp(buf, HELLO_WORLD_RESPONSE HELLO_WORLD_RESPONSE));
  closesocket(sock);
  WEB_STOP();
}
Ejemplo n.º 19
0
void *transfer(void *p) {
	TParam *param = (TParam *)p;
	int in = param->in;
	int out = param->out;
	int bro = param->bro;
	char buf[BUF_LEN];
	while (true) {
		int ret = recv(in, buf, BUF_LEN, 0);
		if (ret <= 0) {
			break;
		}
		//enc(buf, ret);
		ret = send_n(out, buf, ret);
		if (ret < 0) {
			break;
		}
	}
	close(in);
	close(out);
	pthread_cancel(bro);
	return NULL;
}
Ejemplo n.º 20
0
TEST(http, send_error_request) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock,
                         "1234567890" GET_REQUEST "123\r\n\r\n",
                         strlen(GET_REQUEST) + 17));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  ASSERT_EQ( s, 0);
  closesocket(sock);
  log_buf.str[log_buf.len] = 0;
  ASSERT_STREQ("parse error:HPE_INVALID_METHOD", log_buf.str);

  WEB_STOP();
}
Ejemplo n.º 21
0
TEST(http, async_end_not_call_with_not_thunked) {
  WEB_DECL();
  uv_os_sock_t     sock;
  char             buf[2048];
  size_t           s;

  WEB_INIT();
  shttp_set_log_callback(&on_log, &log_buf);
  settings.callbacks.on_message_complete = &on_message_complete_async_not_thunked;
  WEB_START();

  sock = connect_tcp("127.0.0.1", TEST_PORT);
  ASSERT_EQ(true, send_n(sock, simple_request, strlen(simple_request)));
  s = max_recv(sock, buf, 2048, RECV_TIMEOUT);
  //ASSERT_EQ(s, strlen(BODY_NOT_COMPLETE));
  //ASSERT_EQ(0, strcmp(buf, BODY_NOT_COMPLETE));
  closesocket(sock);

  WEB_STOP();

  log_buf.str[log_buf.len] = 0;
  ASSERT_STREQ("callback: chunked must is true while body is not completed.", log_buf.str);
}
Ejemplo n.º 22
0
int main(int argc,char **argv)
{
    if(argc != 3){
        printf("error args\n");
        return -1;
    }

    int sfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sfd){
        perror("socket");
        return -1;
    }


    struct sockaddr_in ser;
    bzero(&ser,sizeof(ser));
    ser.sin_family = AF_INET;
    ser.sin_port = htons(atoi(argv[2]));
    ser.sin_addr.s_addr  = inet_addr(argv[1]);

    int ret;
    ret = connect(sfd,(struct sockaddr*)&ser,sizeof(struct sockaddr));
    if(-1 == ret){
        perror("connect");
        return -1;
    }
    printf("connect success\n");

    char buf[128];
    int fd;
    int flag = 0;
    while(1){
        bzero(buf,sizeof(buf));
        ret = read(0,buf,sizeof(buf));
        if(-1 == ret){
            perror("read");
            return -1;
        }
        send(sfd,buf,strlen(buf),0);
        bzero(buf,sizeof(buf));
        ret = recv(sfd,buf,sizeof(buf),0);
        //printf("sizeof buf is %d\n",(int)sizeof(buf));
        printf("%s\n",buf);
        //下载文件
        if(memcmp(buf,"downloading...",14) == 0){
            printf("ready to receive files\n");
            data_t data;
            bzero(&data,sizeof(data));
            //接收文件名
            ret = recv(sfd,&data.len,sizeof(int),0);
            printf("file name,len is %d\n",data.len);
            if(-1 == ret){
                perror("recv1");
                return -1;
            }
            printf("data.len is %d\n",data.len);
            recv(sfd,data.buf,data.len,0);
            printf("recv name success,name is %s",data.buf);
            fd = open(data.buf,O_RDWR | O_CREAT,0666);
            if(-1 == fd){
                perror("open");
                return -1;
            }
            while(1){
                bzero(&data,sizeof(data));
                ret= recv(sfd,&data.len,4,0);
                if(-1 == ret){
                    perror("recv2");
                    return -1;
                }
                //为什么这里不是recv_n
                recv(sfd,data.buf,data.len,0);
                if(-1 == ret){
                    perror("recv3");
                    return -1;
                }
                //结束文件传输
                if(data.len == sizeof(int) && !memcmp(data.buf,&flag,4)){
                    break;
                }
                ret = write(fd,data.buf,data.len);
                if(ret < 0){
                    perror("write");
                    return -1;
                }
            }
        }
        if(memcmp(buf,"uploading...",12 == 0)){
            char index[128];
            bzero(index,sizeof(index));
            recv(sfd,index,sizeof(index),0);
            printf("index is %s\n",index);

            printf("ready to upload files\n");
            data_t data;
            bzero(&data,sizeof(data));
            //接收文件名
            data.len = strlen(index);
            strcpy(data.buf,index);

            /*data.len是data.buf的长度,+4是再加上int len的4个字节的长度*/
            ret = send(sfd,&data,data.len + 4,0);//?发送文件名
            if(-1 == ret){
                perror("send1");
                return -1;
            }
            fd = open(index,O_RDONLY);
            if(-1 == fd){
                perror("open");
                return -1;
            }
            //此处运用巧妙办法,直接将data.len设置为read的返回值
            while(bzero(&data,sizeof(data)),(data.len = read(fd,data.buf,sizeof(data.buf))) > 0){
                send_n(sfd,(char*)&data,data.len + 4);

                //send(sfd,&data,data.len + 4,0);
            }

            data.len = sizeof(int);
            memcpy(data.buf,&flag,4);
            ret = send(sfd,&data,data.len + 4,0);//?发送结束符
            if(-1 == ret){
                perror("send2");
                return -1;
            }

        }
    }
    close(sfd);
    return 0;
}