(file) Return to client.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus_unsupported / utils / memo

File: [Pegasus] / pegasus_unsupported / utils / memo / client.cpp (download)
Revision: 1.1, Wed Oct 26 17:19:58 2005 UTC (18 years, 8 months ago) by karl
Branch: MAIN
CVS Tags: HEAD
PEP#: 240
TITLE: Add new tool (memo)

DESCRIPTION: Add new tool.  Note readme explains tool.

/*
**==============================================================================
**
** Copyright (c) 2003, 2004, 2005 Michael E. Brasher
** 
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and associated documentation files (the "Software"),
** to deal in the Software without restriction, including without limitation
** the rights to use, copy, modify, merge, publish, distribute, sublicense,
** and/or sell copies of the Software, and to permit persons to whom the
** Software is furnished to do so, subject to the following conditions:
** 
** The above copyright notice and this permission notice shall be included in
** all copies or substantial portions of the Software.
** 
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
** SOFTWARE.
**
**==============================================================================
*/

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <unistd.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cassert>
#include "memo.h"

void run_client(char command)
{
    //// Read the port from the port file:

    char path[64];
    sprintf(path, "/tmp/memo.port");

    FILE* is = fopen(path, "rb");

    if (!is)
    {
	fprintf(stderr, "cannot open %s: server must not be running\n", path);
	exit(1);
    }

    char line[32];

    if (fgets(line, sizeof(line), is) == NULL)
    {
	fprintf(stderr, "cannot read %s: server must not be running\n", path);
	exit(1);
    }

    unsigned long tmp = strtoul(line, NULL, 10);

    if (tmp == 0)
    {
	fprintf(stderr, "cannot read %s: server must not be running\n", path);
	exit(1);
    }

    unsigned short port = (unsigned short)tmp;

    // printf("Connecting on port %u\n", port);

    //// Initialize address:

    sockaddr_in addr;
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);

    //// Create socket:

    int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    assert(sock);

    //// Conect socket to server:

    if (connect(sock, (sockaddr*)&addr, sizeof addr) != 0)
    {
	fprintf(stderr, "failed to connect\n");
	exit(1);
    }

    //// Write request to server:

    if (write(sock, &command, sizeof(command)) != 1)
    {
	fprintf(stderr, "failed to communicate with server\n");
	exit(1);
    }

    //// Read response back from server:

    char ch;

    while (read(sock, &ch, 1) == 1)
	putchar(ch);
}

int main(int argc, char** argv)
{
    char command;

    if (argc != 2)
    {
	fprintf(stderr, "Usage: %s (total|check)\n", argv[0]);
	exit(1);
    }

    if (strcmp(argv[1], "total") == 0)
	command = 'T';
    else if (strcmp(argv[1], "check") == 0)
	command = 'C';
    else
    {
	fprintf(stderr, "%s: bad command\n", argv[0]);
	exit(1);
    }

    run_client(command);

    return 0;
}

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2