Ejemplo n.º 1
0
static void
createTransportAndClient(
    xmlrpc_env *     const envP,
    const char *     const transportName,
    const void *     const transportparmsP,
    size_t           const transportparmSize,
    int              const flags,
    const char *     const appname,
    const char *     const appversion,
    xmlrpc_dialect   const dialect,
    xmlrpc_client ** const clientPP) {

    const struct xmlrpc_client_transport_ops * transportOpsP;

    getTransportOps(envP, transportName, &transportOpsP);
    if (!envP->fault_occurred) {
        xmlrpc_client_transport * transportP;
        
        /* The following call is not thread-safe */
        transportOpsP->create(
            envP, flags, appname, appversion,
            transportparmsP, transportparmSize,
            &transportP);
        if (!envP->fault_occurred) {
            bool const myTransportTrue = true;

            clientCreate(envP, myTransportTrue, transportOpsP, transportP,
                         dialect, clientPP);
            
            if (envP->fault_occurred)
                transportOpsP->destroy(transportP);
        }
    }
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
    // Arguments parser.
    ClientArguments arguments;
    if (clientArgumentsCreate(&arguments, argc, argv) == ERROR) {
        return ERROR;
    }
    
    Client client;
    if (clientCreate(&client) == ERROR) {
        return ERROR;
    }
    
    char *url = clientArgumentsURL(&arguments);
    short port = clientArgumentsPort(&arguments);
    if (clientConnect(&client, url, port) == ERROR) {
        return ERROR;
    }
    
    if (clientReceive(&client) == ERROR) {
        return ERROR;
    }
    
    clientArgumentsDestroy(&arguments);
    clientDestroy(&client);
    
    return ZERO;
}
Ejemplo n.º 3
0
/**
 * FUNCTION NAME: stabilizationProtocol
 *
 * DESCRIPTION: This runs the stabilization protocol in case of Node joins and leaves
 * 				It ensures that there always 3 copies of all keys in the DHT at all times
 * 				The function does the following:
 *				1) Ensures that there are three "CORRECT" replicas of all the keys in spite of failures and joins
 *				Note:- "CORRECT" replicas implies that every key is replicated in its two neighboring nodes in the ring
 */
void MP2Node::stabilizationProtocol() {
	/*
	 * Implement this
	 */
	log->LOG(&memberNode->addr, "stabilizationProtocol");
	for (auto it = ht->hashTable.begin(); it != ht->hashTable.end(); ++it) {
		clientCreate(it->first, it->second);
	}
	return;
}
Ejemplo n.º 4
0
void 
xmlrpc_client_create(xmlrpc_env *                      const envP,
                     int                               const flags,
                     const char *                      const appname,
                     const char *                      const appversion,
                     const struct xmlrpc_clientparms * const clientparmsP,
                     unsigned int                      const parmSize,
                     xmlrpc_client **                  const clientPP) {
    
    XMLRPC_ASSERT_ENV_OK(envP);
    XMLRPC_ASSERT_PTR_OK(clientPP);

    if (constSetupCount == 0) {
        xmlrpc_faultf(envP,
                      "You have not called "
                      "xmlrpc_client_setup_global_const().");
        /* Impl note:  We can't just call it now because it isn't
           thread-safe.
        */
    } else {
        const char * transportName;
        struct xportParms transportparms;
        const struct xmlrpc_client_transport_ops * transportOpsP;
        xmlrpc_client_transport * transportP;
        xmlrpc_dialect dialect;
        xmlrpc_progress_fn * progressFn;

        getTransportInfo(envP, clientparmsP, parmSize, &transportName, 
                         &transportparms, &transportOpsP, &transportP);
        
        getDialectFromClientParms(clientparmsP, parmSize, &dialect);

        progressFn = parmSize >= XMLRPC_CPSIZE(progressFn) ?
            clientparmsP->progressFn : NULL;
            
        if (!envP->fault_occurred) {
            if (transportName)
                createTransportAndClient(envP, transportName,
                                         transportparms.parmsP,
                                         transportparms.size,
                                         flags, appname, appversion, dialect,
                                         progressFn,
                                         clientPP);
            else {
                bool myTransportFalse = false;
                clientCreate(envP, myTransportFalse,
                             transportOpsP, transportP, dialect, progressFn,
                             clientPP);
            }
        }
    }
}