std::ostream& writeCAF(std::ostream& out, Contig& c) { std::vector<std::string> fields; // ID fields.push_back(makeKeyValue(IDFIELD, c.m_id)); fields.push_back(makeKeyValue(LENFIELD, c.m_length)); fields.push_back(makeKeyValue(COVFIELD, c.m_coverage)); fields.push_back(makeKeyValue(SEQFIELD, c.m_seq)); fields.push_back(makeKeyValue(UNQFIELD, c.m_uniqueFlag)); std::copy(fields.begin(), fields.end(), std::ostream_iterator<std::string>(out, "\t")); return out; }
// return MHD_NO or MHD_YES virtual int handleRequest( struct MHD_Connection *connection, const char */*url*/, const char *method, const char */*version*/, const char *upload_data, size_t *upload_data_size) { // new request if(mState == BEGIN) { if(strcmp(method, "POST") == 0) { mState = WAITING_DATA; // first time there is no data, do nothing and return return MHD_YES; } } if(mState == WAITING_DATA) { if(upload_data && *upload_data_size) { mRequesString += std::string(upload_data, *upload_data_size); *upload_data_size = 0; return MHD_YES; } } std::vector<uint8_t> bytes(mRequesString.begin(), mRequesString.end()); int id = mApiServer->getTmpBlobStore()->storeBlob(bytes); resource_api::JsonStream responseStream; if(id) responseStream << makeKeyValue("ok", true); else responseStream << makeKeyValue("ok", false); responseStream << makeKeyValueReference("id", id); std::string result = responseStream.getJsonString(); struct MHD_Response* resp = MHD_create_response_from_data(result.size(), (void*)result.data(), 0, 1); MHD_add_response_header(resp, "Content-Type", "application/json"); secure_queue_response(connection, MHD_HTTP_OK, resp); MHD_destroy_response(resp); return MHD_YES; }
StreamBase& operator << (StreamBase& left, ChatHandler::Lobby& l) { ChatId chatId(l.id); if (l.is_broadcast) chatId = ChatId::makeBroadcastId(); left << makeKeyValueReference("id", l.id) << makeKeyValue("chat_id", chatId.toStdString()) << makeKeyValueReference("name",l.name) << makeKeyValueReference("topic", l.topic) << makeKeyValueReference("subscribed", l.subscribed) << makeKeyValueReference("auto_subscribe", l.auto_subscribe) << makeKeyValueReference("is_private", l.is_private) << makeKeyValueReference("is_broadcast", l.is_broadcast) << makeKeyValueReference("gxs_id", l.gxs_id); return left; }
StreamBase& operator <<(StreamBase& left, KeyValueReference<ChatLobbyId> kv) { if(left.serialise()) { std::stringstream ss; ss << kv.value; left << makeKeyValue(kv.key, ss.str()); } else { std::string val; left << makeKeyValueReference(kv.key, val); std::stringstream ss(val); ss >> kv.value; } return left; }
void ChatHandler::handleUnreadMsgs(Request &/*req*/, Response &resp) { RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ resp.mDataStream.getStreamToMember(); for(std::map<ChatId, std::list<Msg> >::const_iterator mit = mMsgs.begin(); mit != mMsgs.end(); ++mit) { uint32_t count = 0; for(std::list<Msg>::const_iterator lit = mit->second.begin(); lit != mit->second.end(); ++lit) if(!lit->read) count++; std::map<ChatId, ChatInfo>::iterator mit2 = mChatInfo.find(mit->first); if(mit2 == mChatInfo.end()) std::cerr << "Error in ChatHandler::handleUnreadMsgs(): ChatInfo not found. It is weird if this happens. Normally it should not happen." << std::endl; if(count && (mit2 != mChatInfo.end())) { resp.mDataStream.getStreamToMember() << makeKeyValue("id", mit->first.toStdString()) << makeKeyValueReference("unread_count", count) << mit2->second; } } resp.mStateToken = mUnreadMsgsStateToken; }
void StatsHandler::handleStatsRequest(Request &/*req*/, Response &resp) { StreamBase& itemStream = resp.mDataStream.getStreamToMember(); // location info itemStream << makeKeyValue("name", rsPeers->getGPGName(rsPeers->getGPGOwnId())); itemStream << makeKeyValue("location", AuthSSL::getAuthSSL()->getOwnLocation()); // peer info unsigned int all, online; rsPeers->getPeerCount(&all, &online, false); itemStream << makeKeyValue("peers_all", all); itemStream << makeKeyValue("peers_connected", online); // bandwidth info float downKb, upKb; rsConfig->GetCurrentDataRates(downKb, upKb); itemStream << makeKeyValue("bandwidth_up_kb", (double)upKb); itemStream << makeKeyValue("bandwidth_down_kb", (double)downKb); // DHT/NAT info RsConfigNetStatus config; rsConfig->getConfigNetStatus(config); itemStream << makeKeyValue("dht_active", config.DHTActive); itemStream << makeKeyValue("dht_ok", config.netDhtOk); itemStream << makeKeyValue("dht_size_all", config.netDhtNetSize); itemStream << makeKeyValue("dht_size_rs", config.netDhtRsNetSize); uint32_t netState = rsConfig -> getNetState(); itemStream << makeKeyValue("nat_state", netState); // ok resp.setOk(); }