示例#1
0
static void init_log( void )
{
    if( g_head.inited_ == FALSE )
    {
        g_head.inited_ = TRUE;

        memset( g_blank_buf, ' ', LOG_SIZE );
        g_blank_buf[ LOG_SIZE ]     = '\r';
        g_blank_buf[ LOG_SIZE + 1 ] = '\n';

        load_head( &g_head );
    }
}
示例#2
0
  MeshFactory::MeshFactory (boost::weak_ptr<VertexDataBufferManager> mgr,
                            boost::shared_ptr<GLExtensionProxy> proxy,
                            unsigned head_tessel,
                            unsigned tail_tessel)
    : head (get_format (), mgr, proxy, enough_head_indices (head_tessel)),
      tail (get_format (), mgr, proxy, enough_tail_indices (tail_tessel))
  {
    if (head_tessel < 3 || tail_tessel < 2)
      throw std::logic_error ("impossibly low tessellation requested");

    load_head (head, head_tessel);
    load_tail (tail, tail_tessel);
  }
int fill_mem_obj(request *rq,struct mem_obj *obj,struct mem_obj *old_obj)
{
//	struct	buff		*to_server_request = NULL;
    char *answer=NULL;
    char *fake_header;
    head_info m_head;
    int fake_header_len=0;
    int r=CONNECT_ERR;
    char mk1123buff[50];
    ERRBUF ;
    memset(&m_head,0,sizeof(m_head));
    if(srv_connect(rq)<=0)
        goto error;
    /*
    to_server_request = alloc_buff(4*CHUNK_SIZE);
    if ( !to_server_request ) {
    //	change_state(obj, OBJ_READY);
    	obj->flags |= FLAG_DEAD;
    	goto error;
    }
    */
//	stored_obj(NULL);
//	printf("rq->if_modified_since=%d,obj->times.last_modified=%d\n",rq->if_modified_since,old_obj->times.last_modified);
    if(old_obj && !TEST(rq->flags,RQ_HAS_IF_MOD_SINCE)) {
        if(old_obj->times.last_modified) {
            if (!mk1123time(old_obj->times.last_modified, mk1123buff, sizeof(mk1123buff)) ) {
                klog(ERR_LOG,"cann't mk1123time obj obj->times.date=%d.\n",old_obj->times.last_modified);
                goto error;
            }
        } else {
            if (!mk1123time(obj->created, mk1123buff, sizeof(mk1123buff)) ) {
                klog(ERR_LOG,"cann't mk1123time obj created=%d.\n",old_obj->created);
                goto error;
            }
        }
        fake_header_len=19+sizeof(mk1123buff)+4;
        fake_header = (char *)malloc(fake_header_len);
        if ( !fake_header ) {
            goto error;
            //error	goto validate_err;
        }
        //	printf("fake_header=%s\n",fake_header);
        memset(fake_header,0,fake_header_len);
        snprintf(fake_header,fake_header_len-1, "If-Modified-Since: %s\r\n", mk1123buff);
        answer=build_direct_request("GET", &rq->url, fake_header, rq, 0);
        free(fake_header);
        //	printf("client have no if-modified-since.\n");
    } else {
        answer=build_direct_request("GET",&rq->url,NULL,rq,0);//连接远程主机
    }
//	printf("answer=%s\n",answer);

    if ( !answer ) {
        klog(ERR_LOG,"no mem to alloc.\n");
        goto error;
    }
    /*
    if ( attach_data(answer, strlen(answer), to_server_request) ) {
    	free_container(to_server_request);
    	goto error;
    }
    if(answer){
    	free(answer);
    	answer = NULL;
    }
    */

    r = rq->client->send(answer);
//	free(answer);
//   free_container(to_server_request); to_server_request = NULL;
    //	printf("send data to remote is:%s",to_server_request->data);
    if ( r <=0 ) {//send error
        say_bad_request("Can't send","",
                        ERR_TRANSFER, rq);
        //	printf("cann't send to server.\n");
        //printf("errno=%d\n",ERRNO);
        goto error;
    }
    r=load_head(rq,obj,m_head);
    switch(r) {
    case HEAD_OK:
        if(load_body(rq,obj)<=0) {
            //printf("load body failed.\n");
            r=CONNECT_ERR;
            goto error;
        }
        goto done;
    case CONNECT_ERR:
        //printf("load head failed.\n");
        goto error;
    case HEAD_NOT_MODIFIED:
        if(old_obj && !TEST(rq->flags,RQ_HAS_IF_MOD_SINCE)) {
            goto error;
        } else {
            if(rq->server->send(m_head.head,m_head.len)<0)
                goto error;
        }
        //	printf("%s\n",m_head.head);
        break;

    default:
//		printf("obj->content_length=%d,path=%s\n",obj->content_length,obj->url.path);
        if(m_head.head) {
            if(rq->server->send(m_head.head,m_head.len)<0)
                goto error;
            if(create_select_pipe(rq->server,rq->client,conf.time_out[HTTP],0,-1)==-2)
                r=1;
        }
    }
error:
    IF_FREE(answer);
    IF_FREE(m_head.head);
    rq->client->close();
    destroy_obj(obj,0);
    return r;
done:
    IF_FREE(answer);
    IF_FREE(m_head.head);
    rq->client->close();
    if(!old_obj)
        stored_obj(obj);
    return r;
};