Ejemplo n.º 1
0
static char *ibsystat_serv(void)
{
	void *umad;
	void *mad;
	int attr, mod, size;

	DEBUG("starting to serve...");

	while ((umad = mad_receive_via(buf, -1, srcport))) {
		if (umad_status(buf)) {
			DEBUG("drop mad with status %x: %s", umad_status(buf),
			      strerror(umad_status(buf)));
			continue;
		}

		mad = umad_get_mad(umad);

		attr = mad_get_field(mad, 0, IB_MAD_ATTRID_F);
		mod = mad_get_field(mad, 0, IB_MAD_ATTRMOD_F);

		DEBUG("got packet: attr 0x%x mod 0x%x", attr, mod);

		size =
		    mk_reply(attr, (uint8_t *) mad + IB_VENDOR_RANGE2_DATA_OFFS,
			     sizeof(buf) - umad_size() -
			     IB_VENDOR_RANGE2_DATA_OFFS);

		if (server_respond(umad, IB_VENDOR_RANGE2_DATA_OFFS + size) < 0)
			DEBUG("respond failed");
	}

	DEBUG("server out");
	return 0;
}
Ejemplo n.º 2
0
// Server Listen Function
void server_listen()
{
  // Pipe Descriptor
  int to_server = 0;

  // Create Pipe
  mkfifo(WKP, 0600);

  // Open Pipe
  to_server = open(WKP, O_RDONLY);

  // Respond
  server_respond(to_server);
}
Ejemplo n.º 3
0
/*
 * return response for a request
 */
DBUF *server_response (XML *xml, char *req)
{
  char *url, *ch;
  DBUF *console_response (XML *, char *);
  extern char Software[];

  if (strstarts (req, "GET "))
    url = req + 4;
  else if (strstarts (req, "POST "))
    url = req + 5;
  else
    return (NULL);
#ifdef __RECEIVER__
  ch = xml_get_text (xml, "Phineas.Receiver.Url");
  if (strstarts (url, ch))
  {
    if (url == req + 5)		/* this a POST?			*/
    {
      debug ("getting ebXML response\n");
      if ((ch = ebxml_process_req (xml, req)) != NULL)
        return (dbuf_setbuf (NULL, ch, strlen (ch)));
    }
    return (server_respond (200, "<h3>%s</h3>Receiver", Software));
  }
#endif
#ifdef __CONSOLE__
  ch = xml_get_text (xml, "Phineas.Console.Url");
  if (strstarts (url, ch) || strstarts (url, "/favicon.ico"))
    return (console_response (xml, req));
#endif
  if ((ch = strchr (url, '\n')) == NULL)
    ch = url + strlen (url);
  warn ("request not found for %.*s\n", ch - url, url);
  return (server_respond (400, "404 - <bold>%.*s</bold> not found", 
    ch - url, url));
}
Ejemplo n.º 4
0
/*
 * TASK to handle an incoming request
 */
int server_request (void *parm)
{
  SERVERPARM *s;
  DBUF *req, *res;
  char *curl;

  s = (SERVERPARM *) parm;
  curl = xml_get_text (s->xml, "Phineas.Console.Url");
  res = NULL;
  while ((req = server_receive (s->conn)) != NULL)
  {
    debug ("received %d bytes\n", dbuf_size (req));
    if (dbuf_size (req) == 0)
    {
      dbuf_free (req);
      net_close (s->conn);
      return (-1);
    }
    dbuf_putc (req, 0);
    /*
     * log the request, but filter out GET requests for the console... 
     * noise
     */
    if (!(*curl && strstarts (dbuf_getbuf (req) + 4, curl)))
      server_logrequest (s->conn, dbuf_size (req), dbuf_getbuf (req));
    if ((res = server_response (s->xml, dbuf_getbuf (req))) == NULL)
    {
      res = server_respond (500,
	    "<h3>Failure processing ebXML request</h3>");
    }
    server_header (res);
    net_write (s->conn, dbuf_getbuf (res), dbuf_size (res));
    dbuf_free (res);
    dbuf_free (req);
  }
  net_close (s->conn);
  debug ("request completed\n");
  return (0);
}