int SP_HiveDBProtocol :: removeJson( int dbfile, const char * user, const char * dbname, int * result ) { SP_JsonArrayNode params; { SP_JsonObjectNode * args = new SP_JsonObjectNode(); makeArgs( args, dbfile, user, dbname ); params.addValue( args ); } SP_JsonStringBuffer buffer; SP_JsonRpcUtils::toReqBuffer( "remove", user, ¶ms, &buffer ); SP_NKHttpResponse httpResp; int ret = clientCall( mSocket, "/sphivedb", mIsKeepAlive, buffer.getBuffer(), buffer.getSize(), &httpResp ); if( 0 == ret ) { SP_JsonRpcRespObject respObj( (char*)httpResp.getContent(), httpResp.getContentLength() ); SP_JsonHandle handle( respObj.getResult() ); SP_JsonIntNode * resultNode = handle.toInt(); *result = ( NULL != resultNode ) ? resultNode->getValue() : -1; } return ret; }
int SP_HiveDBProtocol :: removeProtoBuf( int dbfile, const char * user, const char * dbname, int * result ) { SP_ProtoBufEncoder params; { makeArgs( ¶ms, dbfile, user, dbname ); } SP_ProtoBufEncoder reqEncoder; SP_ProtoBufRpcUtils::initReqEncoder( &reqEncoder, "remove", user ); reqEncoder.addBinary( SP_ProtoBufRpcReqObject::eParams, params.getBuffer(), params.getSize() ); SP_NKHttpResponse httpResp; int ret = clientCall( mSocket, "/sphivedb/protobuf", mIsKeepAlive, reqEncoder.getBuffer(), reqEncoder.getSize(), &httpResp ); if( 0 == ret ) { SP_ProtoBufDecoder decoder; decoder.copyFrom( (char*)httpResp.getContent(), httpResp.getContentLength() ); SP_ProtoBufDecoder::KeyValPair_t pair; if( decoder.find( SP_ProtoBufRpcRespObject::eResult, &pair ) ) { *result = pair.m32Bit.s; } } else { SP_NKLog::log( LOG_WARNING, "clientCall %d", ret ); } return ret; }
SP_HiveRespObject * SP_HiveDBProtocol :: executeJson( int dbfile, const char * user, const char * dbname, SP_NKStringList * sql ) { SP_JsonArrayNode params; { SP_JsonObjectNode * args = new SP_JsonObjectNode(); makeArgs( args, dbfile, user, dbname ); SP_JsonArrayNode * sqlNode = new SP_JsonArrayNode(); for( int i = 0; i < sql->getCount(); i++ ) { sqlNode->addValue( new SP_JsonStringNode( sql->getItem( i ) ) ); } SP_JsonPairNode * sqlPair = new SP_JsonPairNode(); sqlPair->setName( "sql" ); sqlPair->setValue( sqlNode ); args->addValue( sqlPair ); params.addValue( args ); } SP_JsonStringBuffer buffer; SP_JsonRpcUtils::toReqBuffer( "execute", user, ¶ms, &buffer ); SP_HiveRespObject * resp = NULL; SP_NKHttpResponse httpResp; int ret = clientCall( mSocket, "/sphivedb", mIsKeepAlive, buffer.getBuffer(), buffer.getSize(), &httpResp ); if( 0 == ret ) { SP_JsonRpcRespObject * inner = new SP_JsonRpcRespObject( (char*)httpResp.getContent(), httpResp.getContentLength() ); resp = new SP_HiveRespObjectJson( inner, 1 ); } else { SP_NKLog::log( LOG_WARNING, "clientCall %d", ret ); } return resp; }
SP_HiveRespObject * SP_HiveDBProtocol :: executeProtoBuf( int dbfile, const char * user, const char * dbname, SP_NKStringList * sql ) { SP_ProtoBufEncoder params; { makeArgs( ¶ms, dbfile, user, dbname ); for( int i = 0; i < sql->getCount(); i++ ) { params.addString( SP_HiveReqObjectProtoBuf::eSQL, sql->getItem(i) ); } } SP_ProtoBufEncoder reqEncoder; SP_ProtoBufRpcUtils::initReqEncoder( &reqEncoder, "execute", user ); reqEncoder.addBinary( SP_ProtoBufRpcReqObject::eParams, params.getBuffer(), params.getSize() ); SP_HiveRespObjectProtoBuf * resp = NULL; SP_NKHttpResponse httpResp; int ret = clientCall( mSocket, "/sphivedb/protobuf", mIsKeepAlive, reqEncoder.getBuffer(), reqEncoder.getSize(), &httpResp ); if( 0 == ret ) { SP_ProtoBufRpcRespObject * inner = new SP_ProtoBufRpcRespObject(); inner->copyFrom( (char*)httpResp.getContent(), httpResp.getContentLength() ); resp = new SP_HiveRespObjectProtoBuf( inner, 1 ); } else { SP_NKLog::log( LOG_WARNING, "clientCall %d", ret ); } return resp; }
int main(int argc, char *argv[]) { spnk_initsock();//初始化spnetkit库 SP_NKHttpRequest request; request.setURI("/html/index.html"); request.setMethod("GET"); request.setVersion("Http/1.1"); request.addHeader("Connection", "keep-Alive"); request.addHeader("Host", "127.0.0.1"); SP_NKTcpSocket sp_socket("192.168.40.156", 80); SP_NKHttpResponse response; int ret = SP_NKHttpProtocol::get(&sp_socket, &request, &response); if(ret == 0){ cout << "response:" << endl; cout << response.getVersion() <<"\n"<< response.getStatusCode()<<"\n" << response.getReasonPhrase() <<endl; cout << response.getHeaderCount() << endl; for(int i = 0; i < response.getHeaderCount(); i++){ const char *name = response.getHeaderName(i); const char *val = response.getHeaderValue(i); cout << name << ": " << val << endl; } cout << response.getContentLength() << endl; if(NULL != response.getContent() && response.getContentLength() > 0 ){ cout << (char *)response.getContent() << endl; } }else{ cout << "Http request failed!\n"; } return 0; }