예제 #1
0
bool
Client::Start (
    void
    ) {

    CheckIfTerminated ();

    int value;
    CallServer (Message::START, &value);
    return (bool) value;
    }
예제 #2
0
Client::~Client (
    void
    ) {

    if (! this->terminated)
        CallServer (Message::GOODBYE);    // tell server we're leaving

    free (this->hostname);
    free (this->key);
    free (this->curDir);
    }
예제 #3
0
Milestone
Client::Stop (
    void
    ) {

    CheckIfTerminated ();

    int value;
    CallServer (Message::STOP, &value);
    return (Milestone) value;
    }
예제 #4
0
bool
Client::Terminate (
    void
    ) {

    CheckIfTerminated ();

    int value;
    CallServer (Message::TERMINATE, &value);
    return this->terminated = (bool) value;
    }
예제 #5
0
char *
Client::GetThreadName (
    int id
    ) {

    CheckIfTerminated ();
    char * reply = CallServer (Message::GET_THREADNAME, &id);
    char * name = strdup (reply);
    delete [] reply;
    return name;
    }
예제 #6
0
int
Client::GetThreadCount (
    void
    ) {

    CheckIfTerminated ();

    int count = 0;
    CallServer (Message::GET_THREADCOUNT, &count);
    return count;
    }
예제 #7
0
Milestone
Client::Step (
    int     steps
    ) {

    CheckIfTerminated ();

    int value = steps;
    CallServer (Message::STEP, &value);
    return (Milestone) value;
    }
예제 #8
0
int
Client::CallFunction (
    const char *  funcname,
    int     argument
    ) {

    CheckIfTerminated ();

    int result = argument;
    CallServer (Message::CALL_FUNCTION, &result, funcname, strlen (funcname) + 1);

    return result;
    }
예제 #9
0
Status *
Client::ServerStatus (
    void
    ) {

    CheckIfTerminated ();

    Status * status = new Status;
    char * reply = CallServer (Message::SERVER_STATUS);
    memcpy (status, reply, sizeof (Status));
    delete [] reply;
    return status;
    }
예제 #10
0
char *
Client::GetDescription (
    void
    ) {

    CheckIfTerminated ();
    char * reply = CallServer (Message::GET_DESCRIPTION);
    if (reply == NULL)
        return NULL;

    char * description = strdup (reply);
    delete [] reply;
    return description;
    }
예제 #11
0
Client::Directory *
Client::GetDirectory (
    const char * dirname
    ) {

    CheckIfTerminated ();

    char * reply = CallServer (Message::GET_DIR, NULL, dirname, strlen (dirname) + 1);
    if (reply == NULL)
        throw new Exception (false, "Directory \"%s\" not found", dirname);

    Directory * dir = new Directory ();
    dir->Unserialize (reply);
    delete [] reply;
    return dir;
    }
예제 #12
0
char *
Client::ChangeDirectory (
    const char * dirname
    ) {

    CheckIfTerminated ();

    char * reply = CallServer (Message::CHANGE_DIR, NULL, dirname, strlen (dirname) + 1);
    if (reply == NULL)
        return NULL;

    free (this->curDir);
    this->curDir = strdup (reply);
    delete [] reply;
    return strdup (this->curDir);
    }
예제 #13
0
void
Client::PutData (
    const char *            eltname,
    const unsigned char *   buffer,
    size_t                  size
    ) {

    CheckIfTerminated ();

    size_t namelen = strlen (eltname) + 1;
    char * sendbuf = new char [namelen + size];
    strcpy (sendbuf, eltname);
    memcpy (sendbuf + namelen, buffer, size);

    CallServer (Message::PUT_DATA, (int *) &namelen, sendbuf, namelen + size);
    delete [] sendbuf;
    }
예제 #14
0
Client::DataElement *
Client::GetDataElement (
    const char * eltname
    ) {

    CheckIfTerminated ();

    size_t replysize;
    char * reply = CallServer (Message::GET_ELEMENT, NULL, eltname, strlen (eltname) + 1, &replysize);
    if (reply == NULL)
        return NULL;

    DataElement * elt = new DataElement ();
    elt->Unserialize (reply);
    delete [] reply;
    return elt;
    }
예제 #15
0
Client::Function *
Client::GetFunction (
    const char * funcname
    ) {

    CheckIfTerminated ();

    size_t replysize;
    char * reply = CallServer (Message::GET_FUNCTION, NULL, funcname, strlen (funcname) + 1, &replysize);
    if (reply == NULL)
        return NULL;

    Function * func = new Function ();
    func->Unserialize (reply);
    delete [] reply;
    return func;
    }
예제 #16
0
int
_cdecl
main(
    IN INT argc,
    IN PCSTR argv[]
    )
{
    DWORD dwError = ERROR_SUCCESS;
    SSPI_CLIENT_PARAMS params = { 0 };

    params.pszMessage = DEFAULT_MESSAGE;
    params.pszServerName = DEFAULT_SERVER_NAME;
    params.usServerPort = DEFAULT_SERVER_PORT;
    params.pszSecurityPackage = DEFAULT_SECURITY_PACKAGE;
    params.ulIscFlags = DEFAULT_ISC_FLAGS;

    ParseArgs(argc, argv, &params);

    if (params.bSignOnly)
    {
        printf("No encryption - sign only\n");
    }
    printf("Context req flags:\n");
    DumpIscReqFlags(params.ulIscFlags);

    printf("\n");

    dwError = CallServer(
        params.pszServerName,
        params.usServerPort,
        params.pszServerPrincipalName,
        params.pszUserName,
        params.pszUserPassword,
        params.pszUserDomain,
        params.ulIscFlags,
        params.pszMessage,
        params.pszSecurityPackage,
        params.bSignOnly
        );

    BAIL_ON_ERROR(dwError);

error:
    return dwError;
}
예제 #17
0
void
Client::GetData (
    const char *    eltname,
    unsigned char * buffer,
    size_t          size
    ) {

    CheckIfTerminated ();

    size_t replysize;
    char * reply = CallServer (Message::GET_DATA, NULL, eltname, strlen (eltname) + 1, &replysize);
    if (reply == NULL)
        throw new Exception (false, "Server does not return any data for element \"%s\"", eltname);

    if (replysize > size)
        throw new Exception (false, "Data returned by server for element \"%s\" does not fit in supplied buffer (%d < %d)\n", eltname, size, replysize);

    memcpy (buffer, reply, replysize);
    delete [] reply;
    }
예제 #18
0
Client::ArrayShape *
Client::GetArrayShape (
    const char * arrayname
    ) {

    CheckIfTerminated ();

    int value;
    char * reply = CallServer (Message::ARRAY_SHAPE, &value, arrayname, strlen (arrayname) + 1);
    if (reply == NULL)
        return NULL;

    if ((bool) value == false) {
        delete [] reply;
        return NULL;
        }

    ArrayShape * ash = new ArrayShape ();
    ash->Unserialize (reply);
    delete [] reply;
    return ash;
    }