struct request * request_create( struct tcp *conn ) { struct request *r; time_t stoptime = time(0)+300; char line[REQUEST_LINE_MAX]; char url[REQUEST_LINE_MAX]; char action[REQUEST_LINE_MAX]; char path[REQUEST_LINE_MAX]; char hostport[REQUEST_LINE_MAX]; r = malloc(sizeof(*r)); memset(r,0,sizeof(*r)); r->conn = conn; if(!tcp_readline(r->conn,line,sizeof(line),stoptime)) { request_delete(r); return 0; } if(sscanf(line,"%s %s",action,url)!=2) { request_delete(r); return 0; } while(1) { if(!tcp_readline(conn,line,sizeof(line),stoptime)) { request_delete(r); return 0; } if(!line[0]) break; } if(sscanf(url,"http://%[^/]%s",hostport,path)==2) { // continue on } else { strcpy(path,url); } if(!path[1]) { r->filename = strdup("index.html"); } else { r->filename = strdup(&path[1]); } return r; }
/* * Core function to delete a mailbox. */ static int ifcore_delete(lua_State *lua) { const char *s, *u, *p; int r; if (lua_gettop(lua) != 2) luaL_error(lua, "wrong number of arguments"); luaL_checktype(lua, 1, LUA_TTABLE); luaL_checktype(lua, 2, LUA_TSTRING); lua_pushvalue(lua, 1); if (!(s = get_table_string("server"))) luaL_error(lua, "no mail server specified"); if (!(u = get_table_string("username"))) luaL_error(lua, "no username specified"); p = DISCOVER_PORT(get_table_string("port"), get_table_string("ssl")); lua_pop(lua, 1); r = request_delete(s, p, u, lua_tostring(lua, 2)); lua_pop(lua, 2); lua_pushboolean(lua, (r == STATUS_RESPONSE_OK)); return 1; }
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; }
/* * Core function to delete a mailbox. */ static int ifcore_delete(lua_State *lua) { int r; if (lua_gettop(lua) != 2) luaL_error(lua, "wrong number of arguments"); luaL_checktype(lua, 1, LUA_TLIGHTUSERDATA); luaL_checktype(lua, 2, LUA_TSTRING); while ((r = request_delete((session *)(lua_topointer(lua, 1)), lua_tostring(lua, 2))) == STATUS_NONE); lua_pop(lua, 2); if (r == -1) return 0; lua_pushboolean(lua, (r == STATUS_OK)); return 1; }
/* 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; }
// Handle input from an HTTP socket. void process_http_cb(socket_t *socket) { int used; connection_t *ptr = ilist_fetch(connections, socket->fd); if (ptr == NULL) { printf("%d: Tried to get from list, but got NULL.\n", socket->fd); return; } if (ptr->is_websocket) { // Try to decode a frame. frame_t *f = read_frame(socket->rbuf, socket->rbuf_len, &used); if (f == NULL) { return; } // TODO: Consume instead. bcopy(socket->rbuf, socket->rbuf + used, socket->rbuf_len - used); socket->rbuf_len -= used; char *p = malloc(f->len + 1); strncpy(p, f->payload, f->len); p[f->len] = 0; cmd_t *cmd = parse_msg(p); if (cmd != NULL && cmd->type == CMD_EXECUTE) { process_t *p = execute_cmd((cmd_execute_t *)cmd); ilist_insert(processes, p); sock_pid_t *sp = malloc(sizeof(sock_pid_t)); sp->socket = socket; sp->pid = p; // Write new_process message? char format[] = "{\"newProcess\" : {" "\"pid\" : %d, \"command\" : \"%s\"," "\"startTime\" : %ld," "\"requestId\" : %d}}"; char str[1000]; struct timeval tp; gettimeofday(&tp, NULL); long int time = tp.tv_sec * 1000 + tp.tv_usec; sprintf(str, format, p->pid, ((cmd_execute_t*)cmd)->command_str, time, ((cmd_execute_t*)cmd)->request_id); frame_t *frame = malloc(sizeof(frame_t *)); frame->fin = 1; frame->len = strlen(str); frame->opcode = WS_OP_BIN; frame->payload = str; int fr_len; char *fr_str = write_frame(frame, &fr_len); socket_write(socket, fr_str, fr_len); socket_new(p->out, &process_child_out_cb, sp, socket); ev_child *child_watcher = (struct ev_child*) malloc (sizeof(struct ev_child)); ev_child_init (child_watcher, child_cb, p->pid, 1); child_watcher->data = socket; ev_child_start(loop, child_watcher); } free(f->payload); free(f); free(p); return; } request_t *req = parse_request(socket->rbuf, socket->rbuf_len, &used); if (req) { printf("%d: New Request: %s %s\n", socket->fd, req->method, req->uri); // Take it out of the read buffer. // TODO: Consume bcopy(socket->rbuf, socket->rbuf + used, socket->rbuf_len - used); socket->rbuf_len -= used; // Got a request! int upgraded = try_upgrade(req, ptr); if (upgraded) { printf("%d: Upgraded to WebSocket!\n", socket->fd); } else if (!strcmp(req->uri, "/")) { serve_file(socket, "static/index.html"); } else if (!strcmp(req->uri, "/tnrl.js")) { serve_file(socket, "static/tnrl.js"); } else if (!strcmp(req->uri, "/tnrl.css")) { serve_file(socket, "static/tnrl.css"); } else if (!strcmp(req->uri, "/favicon.ico")) { serve_file(socket, "static/favicon.ico"); } else { // Unknown URL? char *str = "HTTP/1.1 404 Not Found\r\n\r\n"; socket_write(socket, str, strlen(str)); } request_delete(req); } //printf("%s", buf); }
tab_deck_tuning::tab_deck_tuning(QWidget *parent) : QScrollArea(parent), ui(new Ui::tab_deck_tuning) { ui->setupUi(this); // on map la deck view définie private dans l'ui vers un membre de classe public // TODO : verifié si ce lien est toujours utile DeckView = ui->PTreeViewDeckList; // SETUP DECK MODEL // ModeleDeck = new PTreeModel(); ui->PTreeViewDeckList->setModel(ModeleDeck); PDelegateDeck *DelegateDeck = new PDelegateDeck(); ui->PTreeViewDeckList->setItemDelegate(DelegateDeck); // SETUP TAB OVERVIEW // // setup widgets that show decks metas and link them to the model ui->cBFormat->addItems(VtesInfo::DeckFormat); mapper.SetModel(ModeleDeck); mapper.AddWidget( ui->lE_name, VtesInfo::MetasList[VtesInfo::indexName] ); mapper.AddWidget( ui->lE_author, VtesInfo::MetasList[VtesInfo::indexAuthor] ); mapper.AddWidget( ui->pT_summary, VtesInfo::MetasList[VtesInfo::indexdescription] ); mapper.AddWidget( ui->cBFormat, VtesInfo::MetasList[VtesInfo::indexFormat] ); mapper.AddWidget( ui->sB_gp, VtesInfo::MetasList[VtesInfo::indexGamesPlayed] ); mapper.AddWidget( ui->sB_gw, VtesInfo::MetasList[VtesInfo::indexGameWin] ); mapper.AddWidget( ui->sB_tw, VtesInfo::MetasList[VtesInfo::indexTournamentWin] ); mapper.AddWidget( ui->sB_vp, VtesInfo::MetasList[VtesInfo::indexVictoryPoint] ); // setup viped viewer and link it to the model DeckViped = new VipedViewer(this); for (int i=0; i<VtesInfo::VipedList.count(); i++) DeckViped->setData( VtesInfo::VipedList.at(i), 0 ); ui->frame_viped->layout()->addWidget(DeckViped); connect( DeckViped, SIGNAL(dataChanged(QString, int)), ModeleDeck, SLOT(setVipedMeta(QString,int)) ); // model that keep stats of card's types repartition CardTypeModel = new StatsModel(VtesInfo::CardTypeList.count(), 1, this); CardTypeView = new PieChart(); CardTypeView->setLegend("Cards types"); for (int i=0; i<VtesInfo::CardTypeList.count(); i++) { CardTypeModel->setHeaderData(i, Qt::Vertical, VtesInfo::CardTypeList[i]); } CardTypeView->setModel(CardTypeModel); dynamic_cast<QGridLayout *>(ui->frameOverView->layout())->addWidget( CardTypeView, 0, 0 ); // model that keep stats of card's cost repartition CardCostModel = new StatsModel(7, 1, this); for (int i=0; i<CardCostModel->rowCount(); i++) CardCostModel->setHeaderData(i, Qt::Vertical, "Cost " + QString::number(i) ); CardCostView = new PieChart(); CardCostView->setLegend("Cards costs"); CardCostView->setModel(CardCostModel); dynamic_cast<QGridLayout *>(ui->frameOverView->layout())->addWidget( CardCostView, 0, 1 ); // model that keep stats of crypt capacity repartition CapacityModel = new StatsModel(11, 1, this); CapacityModel->setHeaderData(0, Qt::Horizontal, "Capacity curve"); CapacityView = new LinearChart(); CapacityView->setEditTriggers(QAbstractItemView::NoEditTriggers); CapacityView->setModel( CapacityModel ); dynamic_cast<QGridLayout *>(ui->frameOverView->layout())->addWidget( CapacityView, 1, 0 ); // model that keep stats of crypt grouping repartition GroupingModel = new StatsModel(6, 1, this); GroupingModel->setHeaderData(0, Qt::Horizontal, "Grouping repartition"); GroupingView = new LinearChart(); GroupingView->setEditTriggers(QAbstractItemView::NoEditTriggers); ChartStyle style = GroupingView->columnStyle( 0 ); style.setType( Marb::Bar ); GroupingView->setColumnStyle( 0, style ); GroupingView->setModel( GroupingModel ); dynamic_cast<QGridLayout *>(ui->frameOverView->layout())->addWidget( GroupingView, 1, 1 ); // models that keep stats of disciplines spread in the Library DisciplineLibModel = new StatsDisciplineModel(1, VtesInfo::DisciplinesList.count(), this); QString temp; QModelIndex temp_index; for (int i=0; i<VtesInfo::DisciplinesList.count(); i++) { temp = VtesInfo::DisciplinesSigleList[i]; temp_index = DisciplineLibModel->index(0, i); DisciplineLibModel->setHeaderData(i, Qt::Horizontal, temp); if ( temp_index.isValid() ){ DisciplineLibModel->setData( temp_index, ":/icons/disc/" + temp + ".png" , Qt::UserRole); DisciplineLibModel->setData( temp_index, 0, Qt::DisplayRole ); } } DisciplineLibView = new QTableView(this); DisciplineLibView->setModel(DisciplineLibModel); DisciplineDelegate *LibDisciplineDelegate = new DisciplineDelegate(DisciplineLibView); DisciplineLibView->setItemDelegate( LibDisciplineDelegate ); DisciplineLibView->verticalHeader()->hide(); DisciplineLibView->horizontalHeader()->hide(); DisciplineLibView->setRowHeight(0, 115); DisciplineLibView->setFrameStyle(QFrame::NoFrame); for (int i=0; i<DisciplineLibModel->columnCount(); i++) { DisciplineLibView->setColumnWidth(i, 45); DisciplineLibView->setColumnHidden(i , true); } DisciplineLibView->setShowGrid(false); DisciplineLibView->setEditTriggers(QAbstractItemView::NoEditTriggers); dynamic_cast<QGridLayout *>( ui->disciplineLibrary->layout() )->addWidget( DisciplineLibView, 0, 0 ); connect( DisciplineLibModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(refresh_disciplinesLib_view(QStandardItem *)) ); // models that keep stats of disciplines spread in the Crypt DisciplineCryptModel = new StatsDisciplineModel(2, VtesInfo::DisciplinesSigleList.count(), this); for (int i=0; i<VtesInfo::DisciplinesSigleList.count(); i++) { temp = VtesInfo::DisciplinesSigleList[i]; DisciplineCryptModel->setHeaderData(i, Qt::Horizontal, temp); temp_index = DisciplineCryptModel->index(0, i); if ( temp_index.isValid() ){ DisciplineCryptModel->setData( temp_index, ":/icons/disc/" + temp + ".png" , Qt::UserRole); DisciplineCryptModel->setData( temp_index, 0, Qt::DisplayRole ); } temp_index = DisciplineCryptModel->index(1, i); if ( temp_index.isValid() ){ DisciplineCryptModel->setData( temp_index, ":/icons/disc/" + temp + "-sup.png" , Qt::UserRole); DisciplineCryptModel->setData( temp_index, 0, Qt::DisplayRole ); } } DisciplineCryptView = new QTableView( this ); DisciplineCryptView->setModel( DisciplineCryptModel ); DisciplineDelegate *CryptDisciplineDelegate = new DisciplineDelegate(DisciplineCryptView); DisciplineCryptView->setItemDelegate( CryptDisciplineDelegate ); DisciplineCryptView->verticalHeader()->hide(); DisciplineCryptView->horizontalHeader()->hide(); DisciplineCryptView->setRowHeight(0, 115); DisciplineCryptView->setRowHeight(1, 115); DisciplineCryptView->setFrameStyle(QFrame::NoFrame); for (int i=0; i<DisciplineCryptModel->columnCount(); i++) { DisciplineCryptView->setColumnWidth(i, 45); DisciplineCryptView->setColumnHidden(i , true); } DisciplineCryptView->setShowGrid(false); DisciplineCryptView->setEditTriggers(QAbstractItemView::NoEditTriggers); dynamic_cast<QGridLayout *>( ui->disciplineCrypt->layout() )->addWidget( DisciplineCryptView, 0, 0 ); connect( DisciplineCryptModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(refresh_disciplinesCrypt_view(QStandardItem *)) ); // SETUP TAB CRYPT DETAILS cryptGalerie = new QListView(); cryptGalerie->setFixedHeight(450); cryptGalerie->setUniformItemSizes(true); cryptGalerie->setGridSize( QSize(150,210) ); cryptGalerie->setIconSize( QSize(144,200) ); cryptGalerie->setWrapping(true); cryptGalerie->setMovement(QListView::Static); //cryptGalerie->setDragDropMode(QAbstractItemView::InternalMove); cryptGalerie->setFrameShape(QFrame::NoFrame); cryptGalerie->setModel(ModeleDeck); cryptGalerie->setModelColumn(0); cryptGalerie->setRootIndex(ModeleDeck->itemCrypt->index()); ui->frameCrypt->layout()->addWidget( cryptGalerie ); // SETUP TAB LIBRARY DETAILS LibraryGalerie = new QListView(); LibraryGalerie->setFixedHeight(660); LibraryGalerie->setUniformItemSizes(true); LibraryGalerie->setGridSize( QSize(150,210) ); LibraryGalerie->setIconSize( QSize(144,200) ); LibraryGalerie->setWrapping(true); LibraryGalerie->setMovement(QListView::Static); //LibraryGalerie->setDragDropMode(QAbstractItemView::InternalMove); LibraryGalerie->setFrameShape(QFrame::NoFrame); LibraryGalerie->setModel(ModeleDeck); LibraryGalerie->setModelColumn(0); LibraryGalerie->setRootIndex(ModeleDeck->itemLib->index()); ui->frameLibrary->layout()->addWidget( LibraryGalerie ); // CONNECTIONS /* connect the fake buttons nested in CardItem */ connect( ui->PTreeViewDeckList, SIGNAL(request_increment(QModelIndex)), ModeleDeck, SLOT(IncrementCardItem(QModelIndex)) ); connect( ui->PTreeViewDeckList, SIGNAL(request_decrement(QModelIndex)), ModeleDeck, SLOT(DecrementCardItem(QModelIndex)) ); connect( ui->PTreeViewDeckList, SIGNAL(request_delete(QModelIndex)) , ModeleDeck, SLOT(RemoveCardITem(QModelIndex)) ); /* connect Stats model to changes of the deck model for syncs purposes */ connect( ModeleDeck, SIGNAL( DeckChanged(QModelIndex) ), this, SLOT( refresh_stat_model(QModelIndex) ) ); connect( ModeleDeck, SIGNAL( DeckCleared() ), this, SLOT( clear_stat_model() ) ); connect( ModeleDeck, SIGNAL( DeckCleared() ), this, SLOT( clear_widgets()) ); }