Beispiel #1
0
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;
}
Beispiel #2
0
/*
 * 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;
}
Beispiel #4
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;
}
Beispiel #5
0
/*
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;
}
Beispiel #6
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()) );
}