Esempio n. 1
0
/*
 *
    should use evbuffer_free(evb); to free this evbuffer
 * */
static struct http_response * http_req(char * ip, int port, char * verb, char * path, char * data){

    char port_str[6];
    sprintf(port_str, "%d", port);

    int cs = client_socket(ip, port_str);
    char * request_buffer = alloca(100 + strlen(path)); // in stack do not need free
    char response_buffer[1024*8];

    sprintf(request_buffer, "%s %s HTTP/1.0\r\nContent-Length: %d\r\n\r\n%s\r\n\r\n", verb, path, strlen(data), data);
    //sprintf(request_buffer, "GET %s HTTP/1.0\r\nUser-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15\r\n\r\n", path);
    fprintf(stderr, "%s", request_buffer);

    int rst = tcptowrite(cs, request_buffer, strlen(request_buffer) , 30000);
    printf("tcptowrite rst: %d", rst);
    int readed = 0;

    struct evbuffer *evb = evbuffer_new();
    /*evbuffer_read(evb, cs, 30);*/

    while ((readed = tcptoread(cs, response_buffer, 1024*8, 30000)) > 0){
        printf("readed len: %d \n", readed);
        evbuffer_add(evb, response_buffer, readed);
    }

    struct evbuffer_ptr evbptr = evbuffer_search(evb, "\r\n\r\n", 4, NULL);

    struct evbuffer *headers = evbuffer_new();
    evbuffer_remove_buffer(evb, headers, evbptr.pos);
    /*evbuffer_drain(evb, evbptr.pos);*/
    tcpclose(cs);
    int code = parse_response_status_code(headers);
    return http_response_new(code, headers, evb);
}
Esempio n. 2
0
static inline int32_t mainserv_towrite(int sock,const uint8_t *ptr,uint32_t leng,uint32_t timeout) {
	int32_t r;
       	r = tcptowrite(sock,ptr,leng,timeout);
	if (r>0) {
		mainserv_bytesout(r);
	}
	return r;
}
Esempio n. 3
0
int client()
{
    int cs = client_socket("127.0.0.1", "9991");
    tcptowrite(cs, "helloworl", 10, 1000);
    /*printf("write ok %d \n", n); */
    tcpclose(cs);
    return 0;
}
Esempio n. 4
0
int client(){
    int cs = client_socket("127.0.0.1", "9991");
    uint8_t buffer [10000];
    mc_mkdir_request * req = create_mkdir_request();
    int len = mc_mkdir_request_pack(req, buffer, 10000);
    printf("tcptowrite %d", len);

    if (tcptowrite(cs, buffer, len, 1000) <= 0)
        perror("error on tcptowrite");

    /*printf("write ok %d \n", n);*/
    tcpclose(cs);
    return 0;
}
Esempio n. 5
0
static void* masterproxy_server(void *args) {
	uint8_t header[8];
	uint8_t querybuffer[QUERYSIZE];
	uint8_t ansbuffer[ANSSIZE];
	uint8_t *wptr;
	const uint8_t *rptr;
	int sock = *((int*)args);
	uint32_t psize,cmd,msgid,asize,acmd;

	free(args);

	for (;;) {
		if (tcptoread(sock,header,8,1000)!=8) {
			tcpclose(sock);
			return NULL;
		}

		rptr = header;
		cmd = get32bit(&rptr);
		psize = get32bit(&rptr);
		if (cmd==CLTOMA_FUSE_REGISTER) {	// special case: register
			// if (psize>QUERYSIZE) {
			if (psize!=73) {
				tcpclose(sock);
				return NULL;
			}

			if (tcptoread(sock,querybuffer,psize,1000)!=(int32_t)(psize)) {
				tcpclose(sock);
				return NULL;
			}

			if (memcmp(querybuffer,FUSE_REGISTER_BLOB_ACL,64)!=0) {
				tcpclose(sock);
				return NULL;
			}

			if (querybuffer[64]!=REGISTER_TOOLS) {
				tcpclose(sock);
				return NULL;
			}

			wptr = ansbuffer;
			put32bit(&wptr,MATOCL_FUSE_REGISTER);
			put32bit(&wptr,1);
			put8bit(&wptr,STATUS_OK);

			if (tcptowrite(sock,ansbuffer,9,1000)!=9) {
				tcpclose(sock);
				return NULL;
			}
		} else {
			if (psize<4 || psize>QUERYSIZE) {
				tcpclose(sock);
				return NULL;
			}

			if (tcptoread(sock,querybuffer,psize,1000)!=(int32_t)(psize)) {
				tcpclose(sock);
				return NULL;
			}

			rptr = querybuffer;
			msgid = get32bit(&rptr);

			asize = ANSSIZE-12;
			if (fs_custom(cmd,querybuffer+4,psize-4,&acmd,ansbuffer+12,&asize)!=STATUS_OK) {
				tcpclose(sock);
				return NULL;
			}

			wptr = ansbuffer;
			put32bit(&wptr,acmd);
			put32bit(&wptr,asize+4);
			put32bit(&wptr,msgid);

			if (tcptowrite(sock,ansbuffer,asize+12,1000)!=(int32_t)(asize+12)) {
				tcpclose(sock);
				return NULL;
			}
		}
	}
}
Esempio n. 6
0
uint32_t direct_writeblock(const char *src_path, uint64_t chunkid, uint64_t *t_size)
{
	uint8_t *ptr = NULL;
	uint8_t *ibuff = NULL;
	int8_t status = 0;
	uint64_t size;
	uint64_t len;
	uint32_t read_size = 0;
	FILE *fp = NULL;
	char *p_data = NULL;

    fp = fopen(src_path, "rb");
    if (fp == NULL) {
        fprintf(stderr, "open file(%s) failed!\n", src_path);
        return 3;
    }

    size = get_file_size(src_path);
    if (size <= 0) { // 大小为0的文件丢弃
        fprintf(stderr, "get file(%s) error!\n", src_path);
		fclose(fp);
        return 3;
    }
 
	ibuff = malloc(24);
	ptr = ibuff;

	PUT32BIT(DRWTODAT_WRITE_INFO, ptr);
	PUT32BIT(16, ptr);
	PUT64BIT(chunkid, ptr);
	PUT64BIT(size,ptr);

	if (tcptowrite(rw_sock, ibuff, 24, CSMSECTIMEOUT) != 24) {
		free(ibuff);
		fclose(fp);
		fprintf(stderr, "write data to dat error!\n");
		return 3;
	}
	free(ibuff);
	// 等待dat端的回复
	uint8_t hdr[13];
	uint8_t *ptr1 = NULL;
	uint32_t cmd1 = 0;
	uint32_t len1 = 0;
	uint32_t version1 = 0;

	ptr1 = hdr;
	if (read(rw_sock, hdr, 13) != 13) {
		fprintf(stderr, "read data from dat error\n");
	}
	GET32BIT(cmd1, ptr1);
	GET32BIT(len1, ptr1);
	GET32BIT(version1, ptr1);
	GET8BIT(status, ptr1);
int i = 0;
for(i=0; i< 13; i++) {
	fprintf(stderr, "%u-", hdr[i]);
}
fprintf(stderr, "hdr end\n");


	if (cmd1 != DATTODRW_WRITE_INFO || status != 0) {
		fprintf(stderr, "dat not ready!\n");
		return 1;
	} 

	ibuff = malloc(W_PACK_SIZE*sizeof(uint8_t));
	ptr = ibuff;
	p_data = malloc(W_PACK_SIZE*sizeof(char));
	len = 0;
  	while (len < size) {
        read_size = fread(p_data, sizeof(char), W_PACK_SIZE, fp);
	 	if (read_size < 0) {
            fprintf(stderr, "fread file(%s) error!\n", src_path);
		 	fclose(fp);
			free(ibuff);
			free(p_data);
            return 3;
        }
		memcpy(ptr, p_data, read_size);
		if (tcptowrite(rw_sock, ibuff, read_size, CSMSECTIMEOUT) != read_size) {
			fprintf(stderr, "readblock; tcpwrite error!\n");
			free(ibuff);
			free(p_data);
		 	fclose(fp);
			return 3;
		}
		if (DEBUG) {
			fprintf(stderr, "total size(%llu), read size: %llu\n",
					(unsigned long long int)size, (unsigned long long int)len);
		}
		len += read_size;
	}
	fprintf(stderr, "Write over!\n");
	
	*t_size = size;
    fclose(fp);
	free(ibuff);
	free(p_data);

	return status;
}