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 ); } }
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; };