示例#1
0
STSStatus request_perform(RequestParams* params, int* httpResponseCode, char* response)
{
    Request* request = 0;
    STSStatus status;
    
    
    if (STSStatusOK != (status = request_get(params, &request))) {
        fprintf(stderr, "Request Get ERR\n");
        return status;
    }
    
    request->getResultCallback = responseCallback;
    request->callbackData = response;
    request->status = STSStatusWaiting;
    
    CURLcode code = curl_easy_perform(request->curl);
    
    if (CURLE_OK != code) {
        request->httpResponseCode = 0;
        *httpResponseCode = request->httpResponseCode;
        request->status = request_curl_code_to_status(code);
        return request->status;
    }
    else {
        *httpResponseCode = request->httpResponseCode;
        request_finish(request);
        return request->status;
    }
}
示例#2
0
文件: main.cpp 项目: Coding110/ddns
int main(int argc, char *argv[])
{
	if(argc > 1){
		if(argc == 3){
			// as normal program, not cgi now
			printf("update dns, domain: %s, host: %s\n", argv[1], argv[2]);
			int ret = dns_update(argv[1], argv[2]);
			if(ret < 0){
			        printf("Internal error.\n");
			}else if(ret == 1){
			        printf("Recorde can't find.\n");
			}else if(ret == 2){
			        printf("Recorde still fresh.\n");
			}else if(ret == 0){
			        printf("Recorde refreshed.\n");
			}else{
			        printf("Unknown error.\n");
			}
		}else{
			printf("Usage: %s <domain> <host>\n", argv[0]);
		}
		return 0;
	}

	FCGX_Stream *in;
	FCGX_Stream *out;
	FCGX_Stream *err;
	FCGX_ParamArray envp;

	char *method = NULL;
	while(FCGX_Accept(&in, &out, &err, &envp) >= 0)
	{
		method = FCGX_GetParam("REQUEST_METHOD", envp);
		if(strcmp(method, "POST") == 0){
			//request_post(in, out, &envp);
		}else if(strcmp(method, "GET") == 0){
			request_get(in, out, &envp);
		}

	}

	FCGX_Finish();

	//test();

	return 0;
}
int answer_to_connection (void *cls, struct MHD_Connection *connection,const char *url, const char *method,const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
	struct MHD_Response *response;
	puts(page);
	
	if (strcmp(method,"GET") == 0)
  	{

		printf("%s New %s request for %s using version %s",__func__, method, url, version);
		request_get(cls,  connection, url,  method, version,  upload_data, upload_data_size, con_cls);
		return 1;
  	}    
  	else if (strcmp(method,"PUT") == 0)
  	{
		printf("%s New %s request for %s using version %s",__func__, method, url, version);
		request_put( cls,  connection, url,  method, version,  upload_data, upload_data_size,con_cls);
		return 1;
	}
	else if (strcmp(method,"DELETE") == 0)
	{
		printf("%s New %s request for %s using version %s",__func__, method, url, version);    
		request_delete( cls,  connection, url,  method, version,  upload_data, upload_data_size,con_cls);
  	}
	else if (strcmp(method,"HEAD") == 0)
	{
		printf("%s New %s request for %s using version %s",__func__, method, url, version);
		request_head( cls,  connection, url,  method, version,  upload_data, upload_data_size,con_cls);
		return 1;
  	}

	else if (strcmp(method,"POST") == 0)
	{
		printf("%s New %s request for %s using version %s",__func__, method, url, version);
		request_post(cls,  connection, url,  method, version,  upload_data, upload_data_size, con_cls);
		return 1;
	}
	else
		printf("%s ERROR %s request for %s using version %s",__func__, method, url, version);
		return 0;
}
示例#4
0
static void recv(struct mwService *srvc, struct mwChannel *chan,
		 guint16 type, struct mwOpaque *data) {

  /* process into results, trigger callbacks */

  struct mwGetBuffer *b;
  struct mwServiceStorage *srvc_stor;
  struct mwStorageReq *req;
  guint32 id;

  g_return_if_fail(srvc != NULL);
  srvc_stor = (struct mwServiceStorage *) srvc;

  g_return_if_fail(chan != NULL);
  g_return_if_fail(chan == srvc_stor->channel);
  g_return_if_fail(data != NULL);

  b = mwGetBuffer_wrap(data);

  id = guint32_peek(b);
  req = request_find(srvc_stor, id);

  if(! req) {
    g_warning("couldn't find request 0x%x in storage service", id);
    mwGetBuffer_free(b);
    return;
  }

  g_return_if_fail(req->action == type);
  request_get(b, req);

  if(mwGetBuffer_error(b)) {
    mw_mailme_opaque(data, "storage request 0x%x, type: 0x%x", id, type);

  } else {
    request_trigger(srvc_stor, req);
  }

  mwGetBuffer_free(b);
  request_remove(srvc_stor, req);
}
示例#5
0
文件: request.c 项目: hjiawei/libs3
void request_perform(const RequestParams *params, S3RequestContext *context)
{
    Request *request;
    S3Status status;

#define return_status(status)                                           \
    (*(params->completeCallback))(status, 0, params->callbackData);     \
    return

    // These will hold the computed values
    RequestComputedValues computed;

    // Validate the bucket name
    if (params->bucketContext.bucketName && 
        ((status = S3_validate_bucket_name
          (params->bucketContext.bucketName, 
           params->bucketContext.uriStyle)) != S3StatusOK)) {
        return_status(status);
    }

    // Compose the amz headers
    if ((status = compose_amz_headers(params, &computed)) != S3StatusOK) {
        return_status(status);
    }

    // Compose standard headers
    if ((status = compose_standard_headers
         (params, &computed)) != S3StatusOK) {
        return_status(status);
    }

    // URL encode the key
    if ((status = encode_key(params, &computed)) != S3StatusOK) {
        return_status(status);
    }

    // Compute the canonicalized amz headers
    canonicalize_amz_headers(&computed);

    // Compute the canonicalized resource
    canonicalize_resource(params->bucketContext.bucketName,
                          params->subResource, computed.urlEncodedKey,
                          computed.canonicalizedResource);

    // Compose Authorization header
    if ((status = compose_auth_header(params, &computed)) != S3StatusOK) {
        return_status(status);
    }
    
    // Get an initialized Request structure now
    if ((status = request_get(params, &computed, &request)) != S3StatusOK) {
        return_status(status);
    }

    // If a RequestContext was provided, add the request to the curl multi
    if (context) {
        CURLMcode code = curl_multi_add_handle(context->curlm, request->curl);
        if (code == CURLM_OK) {
            if (context->requests) {
                request->prev = context->requests->prev;
                request->next = context->requests;
                context->requests->prev->next = request;
                context->requests->prev = request;
            }
            else {
                context->requests = request->next = request->prev = request;
            }
        }
        else {
            if (request->status == S3StatusOK) {
                request->status = (code == CURLM_OUT_OF_MEMORY) ?
                    S3StatusOutOfMemory : S3StatusInternalError;
            }
            request_finish(request);
        }
    }
    // Else, perform the request immediately
    else {
        CURLcode code = curl_easy_perform(request->curl);
        if ((code != CURLE_OK) && (request->status == S3StatusOK)) {
            request->status = request_curl_code_to_status(code);
        }
        // Finish the request, ensuring that all callbacks have been made, and
        // also releases the request
        request_finish(request);
    }
}
示例#6
0
文件: container.c 项目: b409/b409
/*
int
print_out_key (void *cls, enum MHD_ValueKind kind, const char *key,
               const char *value)
{
  SimpleLog_Write(SL_DEBUG,  __func__, "%s: %s", key, value);
  return MHD_YES;
}
*/
int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  /*the info of this thread, so we need there to be defined in function, 
     not be defined as global variables.
  */
 // json_object * Response_page = json_object_new_object();
  //json_object * Response_heads = json_object_new_object();
  //const char *page = "hello, cloud store!";
  struct MHD_Response *response;
	//puts(page);
  //int ret;
char pathname[128];
char pathname_mnt[128];
get_sonstr(url,pathname);
memset(pathname_mnt,0,sizeof(pathname_mnt));
strcat(strcat(pathname_mnt,"/mnt/supercache/"),pathname);

    //printf("pathname %s     pathname_mnt  %s  \n",pathname,pathname_mnt);

  if (strcmp(method,"GET") == 0)
  {
    printf("haha\n");
    //SimpleLog_Write(SL_DEBUG, __func__, "New %s request for %s using version %s", method, url, version);
	printf("%s New %s request for %s using version %s",__func__, method, url, version);
   /******************add by Jin*********************************/ 
    /*time_t arrive_time;
    time(&arrive_time);
    IO_Type io_type=READ;
    queue_in_wait(pathname_mnt,io_type,arrive_time);
    int already_queue_out=0;//the mark of read out early

     Meta_Data * meta_data=(Meta_Data*)malloc(sizeof(Meta_Data));
     if(md_get(pathname_mnt,meta_data)==0)
     {
         u32 head_next=((*meta_data).ioq.head+1)%IO_Q_LEN;
         //if one read comes after one read ,queue out early
         if((*meta_data).ioq.io_q_node[head_next].io_type==READ)
         {
             read_queue_out(pathname_mnt,io_type,arrive_time);
             already_queue_out=1;
         }
     }*/
     /*******************************************************/
    request_get(cls,  connection, url,  method, version,  upload_data, 
		upload_data_size, con_cls);
    
    /* if(already_queue_out==0)
     {
         read_queue_out(pathname_mnt,io_type,arrive_time);
     }*/
	return 1;
  }    
  else if (strcmp(method,"PUT") == 0)
  {
    //SimpleLog_Write(SL_DEBUG, __func__, "New %s request for %s using version %s", method, url, version);
	printf("%s New %s request for %s using version %s",__func__, method, url, version);

    /******************************************************/
    /*time_t arrive_time;
    time(&arrive_time);
    IO_Type io_type=WRITE;
    queue_in_wait(pathname_mnt,io_type,arrive_time);*/
   /********************************************************/
    request_put( cls,  connection, url,  method, version,  upload_data, 
		upload_data_size,con_cls);
   /*********************************************************/ 
    /*u64 offset=0;char *data="never mind!";size_t size1=11;
    write_queue_out(pathname_mnt,io_type,arrive_time,offset,data,size1);//should change it*/
    /*********************************************************/
	return 1;
  }
  else if (strcmp(method,"DELETE") == 0)
  {
    //SimpleLog_Write(SL_DEBUG, __func__, "New %s request for %s using version %s", method, url, version);
	printf("%s New %s request for %s using version %s",__func__, method, url, version);    
    /************************************************/
   /* time_t arrive_time;
    time(&arrive_time);
    IO_Type io_type=REMOVE;
    queue_in_wait(pathname_mnt,io_type,arrive_time);*/
    /************************************************/
	request_delete( cls,  connection, url,  method, version,  upload_data, 
		upload_data_size,con_cls);
    //remove_queue_out(pathname_mnt,io_type);
  }
  else if (strcmp(method,"HEAD") == 0)
  {
    //SimpleLog_Write(SL_DEBUG, __func__, "New %s request for %s using version %s", method, url, version);
	printf("%s New %s request for %s using version %s",__func__, method, url, version);
    request_head( cls,  connection, url,  method, version,  upload_data, 
		upload_data_size,con_cls);
	return 1;
  }

 else if (strcmp(method,"POST") == 0)
  {
      //printf("()()()()\n");
    //SimpleLog_Write(SL_DEBUG, __func__, "New %s request for %s using version %s", method, url, version);
	//printf("%s New %s request for %s using version %s\n",__func__, method, url, version);
    //printf("up_load_size:%u  %s\n",upload_data_size,upload_data);
    /******************************************************/
    /*time_t arrive_time;
    time(&arrive_time);
    IO_Type io_type=WRITE;
    queue_in_wait(pathname_mnt,io_type,arrive_time);*/
   /********************************************************/
    request_post(cls,  connection, url,  method, version,  upload_data, 
		upload_data_size, con_cls);
   /*********************************************************/ 
    /*u64 offset=0;char *data="never mind!";size_t size1=11;
    write_queue_out(pathname_mnt,io_type,arrive_time,offset,data,size1);//should change it*/
    /*********************************************************/
	return 1;
  }
  else
    
	printf("%s ERROR %s request for %s using version %s",__func__, method, url, version);

  return 0;
}