IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 18, 2006, 6:58:54 AM (20 years ago)
Author:
eugene
Message:

updates to fix comm problems with buffers (motivated by opihi gprint)

Location:
trunk/Ohana/src/opihi/pantasks
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pantasks/ListenClients.c

    r7917 r7929  
    4343  struct timeval timeout;
    4444  IOBuffer *outbuffer;
     45  IOBuffer testbuffer;
    4546
    4647  InitClients ();
     48  gprintInit ();  // each thread needs to init the printing system
    4749
    4850  while (0) {
     
    131133
    132134      /* we now have a possible command from the client: run it */
     135      /* in this thread, we set the print output destination to be an
     136         internal buffer, which we dump at the end of the execution */
    133137      /* XXX : we need to handle ; in the client-parsing of commands */
    134138      stripwhite (line);
    135139      if (*line) {
    136         if (1) gprint (GP_ERR, "got command: %s\n", line);
    137         SetOutBuffer ();
     140
     141        if (1) fprintf (stderr, "got command: %s\n", line);
     142
     143        /* this works: we can send a simple message */
     144        # if 0
     145        SendMessage (clients[i], "first");
     146        SendMessage (clients[i], "second");
     147        # endif
     148
     149        /* this works: we can send a message using the IOBuffers */
     150        # if 0
     151        InitIOBuffer (&testbuffer, 64);
     152        PrintIOBuffer (&testbuffer, "this is a test\n");
     153        SendMessageFixed (clients[i], testbuffer.Nbuffer, testbuffer.buffer);
     154        PrintIOBuffer (&testbuffer, "this is a second test\n");
     155        SendMessageFixed (clients[i], testbuffer.Nbuffer, testbuffer.buffer);
     156        # endif
     157
     158        /* this works: we can use the printing system to write a message */
     159        # if 0
     160        gprintSetBuffer (GP_LOG);
     161        gprint (GP_LOG, "test is a test line\n");
     162        outbuffer = gprintGetBuffer (GP_LOG);
     163        SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
     164       
     165        gprint (GP_LOG, "test is a second test line\n");
     166        outbuffer = gprintGetBuffer (GP_LOG);
     167        SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
     168        # endif
     169
     170        /* this works: we can use the gprint service */
     171        # if 0
     172        gprintSetBuffer (GP_LOG);
     173        gprint (GP_LOG, "test is a test line\n");
    138174        status = multicommand (line);
    139         outbuffer = GetOutBuffer ();
    140 
    141         gprint (GP_ERR, "send message: %d bytes\n", outbuffer[0].Nbuffer);
    142         gwrite (outbuffer[0].buffer, 1, outbuffer[0].Nbuffer, GP_ERR);
    143         gprint (GP_ERR, "end message\n");
    144        
    145         SendMessage (clients[i], outbuffer[0].buffer);
    146         SetOutfile ("stdout");
     175
     176        outbuffer = gprintGetBuffer (GP_LOG);
     177        SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
     178        gprintSetFile (GP_LOG, "stdout");
     179       
     180        SendMessage (clients[i], "second");
     181        # endif
     182
     183        /* this only kind of works: it acts as if we hang */
     184        # if 1
     185        gprintSetBuffer (GP_LOG);
     186        gprintSetBuffer (GP_ERR);
     187
     188        // gprint (GP_LOG, "test is a test stdout\n");
     189        // gprint (GP_ERR, "test is a test stderr\n");
     190
     191        status = multicommand (line);
     192        fprintf (stderr, "sending response\n");
     193
     194        // return the stderr messages first
     195        outbuffer = gprintGetBuffer (GP_ERR);
     196        SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
     197        fprintf (stderr, "sent stderr\n");
     198
     199        outbuffer = gprintGetBuffer (GP_LOG);
     200        SendMessageFixed (clients[i], outbuffer[0].Nbuffer, outbuffer[0].buffer);
     201        fprintf (stderr, "sent stdout\n");
     202       
     203        gprintSetFile (GP_LOG, "stdout");
     204        gprintSetFile (GP_ERR, "stderr");
     205        # endif
    147206      }
    148207      free (line);
  • trunk/Ohana/src/opihi/pantasks/Makefile

    r7917 r7929  
    4848$(SDIR)/kill.$(ARCH).o \
    4949$(SDIR)/delete.$(ARCH).o \
     50$(SDIR)/server.$(ARCH).o \
    5051$(SDIR)/verbose.$(ARCH).o \
    5152$(SDIR)/controller.$(ARCH).o \
  • trunk/Ohana/src/opihi/pantasks/SocketOps.c

    r7917 r7929  
    3030  Address[0].sin_addr.s_addr = INADDR_ANY; // use this line to bind any address / port?
    3131
     32retry_server:
     33
    3234# if (0) 
    3335  status = inet_aton (hostip, &Address[0].sin_addr);
     
    4951  status = bind (InitSocket, (struct sockaddr *) Address, length);
    5052  if (status == -1) {
     53    fprintf (stderr, "errno: %d\n", errno);
     54    fprintf (stderr, "EACCES: %d\n", EACCES);
     55    fprintf (stderr, "EBADF: %d\n", EBADF);
     56    fprintf (stderr, "EINVAL: %d\n", EINVAL);
     57    fprintf (stderr, "ENOTSOCK: %d\n", ENOTSOCK);
     58    fprintf (stderr, "EFAULT: %d\n", EFAULT);
     59    fprintf (stderr, "ELOOP: %d\n", ELOOP);
     60    fprintf (stderr, "ENAMETOOLONG: %d\n", ENAMETOOLONG);
     61    fprintf (stderr, "ENOENT: %d\n", ENOENT);
     62    fprintf (stderr, "ENOMEM: %d\n", ENOMEM);
     63    fprintf (stderr, "ENOTDIR: %d\n", ENOTDIR);
     64    fprintf (stderr, "EROFS: %d\n", EROFS);
     65
     66    Address[0].sin_port ++;
     67    if (Address[0].sin_port > MY_PORT + 10) exit (2);
     68    fprintf (stderr, "trying next port: %d\n", Address[0].sin_port);
     69    goto retry_server;
     70
    5171    perror ("bind: ");
    5272    exit (2);
    5373  }
     74  /* repeated starts of the server are limited by xinetd or something:
     75     requires 60sec timeout of the selected socket */
    5476
    5577  status = listen (InitSocket, 10);
     
    140162  Address.sin_family = AF_INET;
    141163  Address.sin_port   = MY_PORT;
     164
     165retry_client:
    142166  status = inet_aton (hostip, &Address.sin_addr);
    143167  if (!status) {
     
    156180  status = connect (InitSocket, (struct sockaddr *) &Address, length);
    157181  if (status == -1) {
     182    if (errno == ECONNREFUSED) {
     183      Address.sin_port ++;
     184      if (Address.sin_port > MY_PORT + 10) exit (2);
     185      fprintf (stderr, "trying next port: %d\n", Address.sin_port);
     186      goto retry_client;
     187    }
    158188    perror ("connect: ");
    159189    exit (2);
  • trunk/Ohana/src/opihi/pantasks/client_shell.c

    r7917 r7929  
    44int client_shell (int argc, char **argv) {
    55
    6   int Nbad, status, server;
     6  int i, Nbad, status, server;
    77  char *line, *outline, *prompt, *history;
    88  char hostname[256], PASSWORD[256];
     
    5555    /* XXX the exit status of command does not allow us
    5656       to distinguish 'failed command' and 'command not found' */
    57     status = command (line, &outline);
    58     if (outline == NULL) {
    59       gprint (GP_ERR, "programming error: command_client returned NULL\n");
    60       exit (2);
    61     }
     57    /* XXX eventually replace this with a multicommand parsing */
     58    status = multicommand_client (line, server);
     59    add_history (line);
     60    append_history (1, history);
    6261
     62    free (line);
     63  }
     64}
     65
     66# if 0
    6367    /* command was not caught by client, send to server */
    6468    if (*outline && !status ) {
     
    7074      // XXX add this in and print to stdout
    7175      status = ExpectMessage (server, 2.0, &message);
    72       gprint (GP_ERR, "got message: %d bytes\n", message.Nbuffer);
    73       gwrite (message.buffer, 1, message.Nbuffer, GP_ERR);
    74       gprint (GP_ERR, "end message\n");
     76      // fprintf (stderr, "got stdout message: %d bytes\n", message.Nbuffer);
     77      fwrite (message.buffer, 1, message.Nbuffer, stderr);
     78      // fprintf (stderr, "end message\n");
     79
     80      // fprintf (stderr, "got message: %d bytes\n", message.Nbuffer);
     81      // for (i = 0; i < message.Nbuffer; i++) {
     82      // fprintf (stderr, "%d %d %c\n", i, message.buffer[i], message.buffer[i]);
     83      // }
     84      // fwrite (message.buffer, 1, message.Nbuffer, stderr);
     85      // fprintf (stderr, "end message\n");
     86
     87      // XXX add this in and print to stdout
     88      status = ExpectMessage (server, 2.0, &message);
     89      // fprintf (stderr, "got stderr message: %d bytes\n", message.Nbuffer);
     90      fwrite (message.buffer, 1, message.Nbuffer, stderr);
     91      // fprintf (stderr, "end message\n");
    7592    }
    76     free (outline);
    77   }
    78 }
     93# endif
    7994
    8095/*
  • trunk/Ohana/src/opihi/pantasks/init.c

    r7892 r7929  
    6464
    6565}
     66
     67int server         PROTO((int, char **));
     68
     69static Command server_cmds[] = { 
     70  {"server",  server,   "server-specific commands"},
     71};
     72
     73void InitPantasksServer () {
     74 
     75  int i;
     76
     77  InitTasks ();
     78  InitJobs ();
     79  InitJobIDs ();
     80
     81  for (i = 0; i < sizeof (cmds) / sizeof (Command); i++) {
     82    AddCommand (&cmds[i]);
     83  }
     84  for (i = 0; i < sizeof (server_cmds) / sizeof (Command); i++) {
     85    AddCommand (&server_cmds[i]);
     86  }
     87
     88}
  • trunk/Ohana/src/opihi/pantasks/pantasks_client.c

    r7917 r7929  
    1414  InitData ();
    1515  InitPantasksClient ();
     16
     17  gprintInit ();
    1618
    1719  rl_readline_name = opihi_name;
  • trunk/Ohana/src/opihi/pantasks/pantasks_server.c

    r7917 r7929  
    2929  InitBasic ();
    3030  InitData ();
    31   InitPantasks ();
     31  InitPantasksServer ();
    3232 
    33   InitPrint ();
     33  gprintInit ();  // each thread needs to init the printing system
    3434
    3535  // signal (SIGPIPE, gotsignal);
     
    4747
    4848  // pthread_create (&thread, NULL, &RunScheduler, NULL);
    49   // pthread_create (&thread, NULL, &pantasks_RunController, NULL);
     49  // pthread_create (&thread, NULL, &RunController, NULL);
    5050
    5151  /* in this loop, we listen for incoming connections, validate, and
  • trunk/Ohana/src/opihi/pantasks/run.c

    r7917 r7929  
    11# include "pantasks.h"
     2
     3// XXX for client/server, we need to simply start or stop the
     4// appropriate threads
     5// with one thread for each of the major actions, this would
     6// make it easy to keep the controller running and stop the
     7// scheduler (don't run CheckTasks, but run everything else
     8// until nothing is left...
    29
    310int run (int argc, char **argv) {
Note: See TracChangeset for help on using the changeset viewer.