ftp.nice.ch/pub/next/unix/admin/msend.1.0.N.bs.tar.gz#/msend/msend.h

This is msend.h in view mode; [Download] [Up]

/* msend.h:
 *
 * header file for 'msend'
 *
 * (c) Copyright 1988 Jim Frost.  All Rights Reserved.  Please see
 * the accompanying file "Copyright" for more information.
 */

#ifndef _MSEND_H_
#define _MSEND_H_

#include "network.h"
#include <errno.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
#include <utmp.h>
#include <sys/types.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>

#define ROOTUID      0       /* system superuser uid */
#define DAEMONUID    1       /* system daemon uid */
#define MAXHOSTNAME  255     /* longest hostname we allow */
#define MAXFILENAME  1024    /* longest filename we allow */
#define MAXDEST      1024    /* longest destination path */
#define MAXUSERNAME  10      /* longest username we allow */
#define MAXTTY       10      /* longest tty (from utmp.h) */
#define MAXSIGNATURE 40      /* longest signature */
#define MAXMSG       1024    /* longest message text (includes signature) */
#define MAXLINE      128     /* longest text line in options file */
#define MAXTOKEN     30      /* longest allowable options file token */
#define MAXFORWARD   5       /* never forward more than this many hosts
                               (this prevents multiple host loops) */
#define BACKLOG      5       /* request backlog */
#define LIFETIME     (10*60) /* how long we live before we give up */

/* message header for requests send to a daemon
 */

struct sheader {
  u_short taddrlen;  /* length of destination address field */
  u_short tttylen;   /* length of destination tty field */
  u_short msglen;    /* length of message field (includes signature) */
};

#define SM_CLOSE     0x01 /* close connection after reply */
#define SM_TTY       0x02 /* send to tty */
#define SM_BROADCAST 0x04 /* broadcast */
#define SM_VERSION   0x08 /* version request */

/* message header for replies sent back to the caller
 */

struct rheader {
  u_short  errno;
  u_short  msglen;
};

#define RE_OK       0 /* message delivered ok */
#define RE_SYSERR   1 /* system error */
#define RE_NOUSER   2 /* user doesn't exist on this host */
#define RE_NOMSGS   3 /* user's terminal may not be written to */
#define RE_NOTTHERE 4 /* user is not logged on at the destination */
#define RE_NOROUTE  5 /* routing is denied at this host */
#define RE_NOBROAD  6 /* broadcasting is denied at this host */
#define RE_FWDLOOP  7 /* forwarding loop (too many forwards) */
#define RE_INTERR   8 /* something really really bad happened */
#define RE_NOTFATAL 9 /* non-fatal error print message don't exit */

/* structures used for internal handling of messages
 */

struct simsg {
  u_short fwdcount;              /* number of times this has been forwarded */
  u_short mode;
  char    taddr[MAXDEST+1];
  char    ttty[MAXTTY+1];
  char    msg[MAXMSG+1];
  char    tohost[MAXHOSTNAME+1]; /* hostname to send message to */
};

struct rimsg {
  struct rheader h;
  char   msg[MAXMSG+1];
};

/* all global functions are defined here to make compilers and checkers
 * happier.
 */

#undef A
#ifdef __STDC__
#define A(ARGS) ARGS
#else
#define A(ARGS) ()
#endif

int main A((int argc, char **argv));
void domessage A((int s));
int establish A((int port));
int fwdloop A((char *host));
void blderr A((struct rimsg *ri, int errno, char *msg));
void die A((int i));
void error A((char *s));
int portnum A((void));
char *striphost A((char addr[], char *host));
char *gethome A((char *user));
int getid A((char *user));

void sendmessage A((struct simsg *si, struct rimsg *ri, int mode));
void sendreply A((int s, struct rimsg *ri, int mode));
void recvmessage A((int s, struct simsg *si));
struct utmp *getutent A((void));
void endutent A((void));
char *whoami A((void));
void broadcast A((struct simsg *si));
int writeuser A((struct simsg *si));

#ifdef NEEDS_FLOCK
#ifndef LOCK_EX /* sometimes fcntl has these even though there's no flock */
#define LOCK_EX 1
#define LOCK_UN 2
#endif
int flock A((int fd, int how));
#endif

#endif _MSEND_H_

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.