void SplitIpPort(StringAttr & ip, unsigned & port, const char * address) { const char * colon = strchr(address, ':'); if (colon) { ip.set(address,colon-address); if (strcmp(ip, ".")==0) ip.set(GetCachedHostName()); port = atoi(colon+1); } else ip.set(address); }
int doSendQuery(const char * ip, unsigned port, const char * base) { Owned<ISocket> socket; Owned<ISecureSocketContext> secureContext; __int64 starttime, endtime; StringBuffer ipstr; try { if (strcmp(ip, ".")==0) ip = GetCachedHostName(); else { const char *dash = strchr(ip, '-'); if (dash && isdigit(dash[1]) && dash>ip && isdigit(dash[-1])) { if (persistConnections) UNIMPLEMENTED; const char *startrange = dash-1; while (isdigit(startrange[-1])) startrange--; char *endptr; unsigned firstnum = atoi(startrange); unsigned lastnum = strtol(dash+1, &endptr, 10); if (lastnum > firstnum) { static unsigned counter; static CriticalSection counterCrit; CriticalBlock b(counterCrit); ipstr.append(startrange - ip, ip).append((counter++ % (lastnum+1-firstnum)) + firstnum).append(endptr); ip = ipstr.str(); printf("Sending to %s\n", ip); } } } starttime= get_cycles_now(); if (persistConnections) { if (!persistSocket) { SocketEndpoint ep(ip,port); persistSocket.setown(ISocket::connect_timeout(ep, 1000)); if (useSSL) { #ifdef _USE_OPENSSL if (!persistSecureContext) persistSecureContext.setown(createSecureSocketContext(ClientSocket)); persistSSock.setown(persistSecureContext->createSecureSocket(persistSocket.getClear())); persistSSock->secure_connect(); persistSocket.setown(persistSSock.getClear()); #else throw MakeStringException(-1, "OpenSSL disabled in build"); #endif } } socket = persistSocket; } else { SocketEndpoint ep(ip,port); socket.setown(ISocket::connect_timeout(ep, 100000)); if (useSSL) { #ifdef _USE_OPENSSL secureContext.setown(createSecureSocketContext(ClientSocket)); Owned<ISecureSocket> ssock = secureContext->createSecureSocket(socket.getClear()); ssock->secure_connect(); socket.setown(ssock.getClear()); #else throw MakeStringException(1, "OpenSSL disabled in build"); #endif } } } catch(IException * e) { pexception("failed to connect to server", e); return 1; } StringBuffer fullQuery; bool useHTTP = forceHTTP || strstr(base, "<soap:Envelope") != NULL; if (useHTTP) { StringBuffer newQuery; Owned<IPTree> p = createPTreeFromXMLString(base, ipt_none, ptr_none); const char *queryName = p->queryName(); if ((stricmp(queryName, "envelope") != 0) && (stricmp(queryName, "envelope") != 0)) { if (queryNameOverride.length()) queryName = queryNameOverride; newQuery.appendf("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><Body><%sRequest>", queryName); Owned<IPTreeIterator> elements = p->getElements("./*"); ForEach(*elements) { IPTree &elem = elements->query(); toXML(&elem, newQuery, 0, XML_SingleQuoteAttributeValues); } newQuery.appendf("</%sRequest></Body></Envelope>", queryName); base = newQuery.str(); } // note - don't support queryname override unless original query is xml fullQuery.appendf("POST /doc HTTP/1.0\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n", (int) strlen(base)).append(base); } else { if (sendToSocket)
void TcpWhoAmI(StringAttr & out) { out.set(GetCachedHostName()); }
int main(int argc, const char **argv) { #ifdef _WIN32 _setmode( _fileno( stdout ), _O_BINARY ); _setmode( _fileno( stdin ), _O_BINARY ); #endif Owned<IProperties> globals = createProperties("dumpkey.ini", true); for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') doOption(argv[i]); else if (strchr(argv[i], '=')) globals->loadProp(argv[i]); else globals->setProp("keyfile", argv[i]); } try { StringBuffer logname("dumpkey."); logname.append(GetCachedHostName()).append("."); StringBuffer lf; openLogFile(lf, logname.append("log").str()); Owned <IKeyIndex> index; const char * keyName = globals->queryProp("keyfile"); if (keyName) index.setown(createKeyIndex(keyName, 0, false, false)); else usage(); Owned <IKeyCursor> cursor = index->getCursor(NULL); size32_t key_size = index->keySize(); Owned<IFile> in = createIFile(keyName); Owned<IFileIO> io = in->open(IFOread); if (!io) throw MakeStringException(999, "Failed to open file %s", keyName); Owned<CKeyHdr> header = new CKeyHdr; MemoryAttr block(sizeof(KeyHdr)); io->read(0, sizeof(KeyHdr), (void *)block.get()); header->load(*(KeyHdr*)block.get()); unsigned nodeSize = header->getNodeSize(); if (!optRaw) { printf("Key '%s'\nkeySize=%d NumParts=%x, Top=%d\n", keyName, key_size, index->numParts(), index->isTopLevelKey()); printf("File size = %"I64F"d, nodes = %"I64F"d\n", in->size(), in->size() / nodeSize - 1); printf("rootoffset=%"I64F"d[%"I64F"d]\n", header->getRootFPos(), header->getRootFPos()/nodeSize); } char *buffer = (char*)alloca(key_size); if (globals->hasProp("node")) { if (stricmp(globals->queryProp("node"), "all")==0) { } else { int node = globals->getPropInt("node"); if (node != 0) index->dumpNode(stdout, node * nodeSize, globals->getPropInt("recs", 0), optRaw); } } else if (globals->hasProp("fpos")) { index->dumpNode(stdout, globals->getPropInt("fpos"), globals->getPropInt("recs", 0), optRaw); } else { bool backwards=false; bool ok; if (globals->hasProp("end")) { memset(buffer, 0, key_size); strcpy(buffer, globals->queryProp("end")); ok = cursor->ltEqual(buffer, buffer); backwards = true; } else if (globals->hasProp("start")) { memset(buffer, 0, key_size); strcpy(buffer, globals->queryProp("start")); ok = cursor->gtEqual(buffer, buffer); } else ok = cursor->first(buffer); unsigned count = globals->getPropInt("recs", 1); while (ok && count--) { offset_t pos = cursor->getFPos(); unsigned __int64 seq = cursor->getSequence(); size32_t size = cursor->getSize(); if (optRaw) { fwrite(buffer, 1, size, stdout); } else if (optHex) { for (unsigned i = 0; i < size; i++) printf("%02x", ((unsigned char) buffer[i]) & 0xff); printf(" :%"I64F"u:%012"I64F"x\n", seq, pos); } else printf("%.*s :%"I64F"u:%012"I64F"x\n", size, buffer, seq, pos); if (backwards) ok = cursor->prev(buffer); else ok = cursor->next(buffer); } } } catch (IException *E) { StringBuffer msg; E->errorMessage(msg); E->Release(); fatal("%s", msg.str()); } releaseAtoms(); ExitModuleObjects(); return 0; }