/* -*- c++ -*- */ /* $Id: portinfo.h,v 1.1 1999/02/22 02:40:47 mahara Exp $ */ #ifndef __portinfo_h_ #define __portinfo_h_ #include #include #include #include "common.h" typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #define SOCK_BUFSIZ 1024 typedef struct { char *name; int value; } PORTOPTION; /* Portinfo::flag */ #define PO_SSL 0x01 #define PO_VERIFY 0x02 class Portinfo { public: char hostname[MAXHOSTNAMELEN]; int flags; SOCKADDR_IN sa; SOCKADDR_IN sa_from_if; Portinfo *next; Portinfo() { next = 0; sa.sin_family = AF_INET; sa_from_if.sin_family = AF_INET; } void init(); int set(char *p); struct sockaddr *getSockAddr() { return (struct sockaddr *)&sa; } SOCKADDR_IN *getSockAddrIn() { return &sa; } SOCKADDR_IN *getSockAddrIn_from_if() { return &sa_from_if; } int isSSL() { return (flags & PO_SSL ? TRUE : FALSE); } int isVerify() { return (flags & PO_VERIFY ? TRUE : FALSE); } void resetSSL() { flags &= !(PO_SSL); } void setSSL() { flags |= PO_SSL; } }; class PortinfoList { public: Portinfo *top; Portinfo *cp; Portinfo *rrp; /* for roundrobin */ PortinfoList() { top = cp = rrp = 0; } ~PortinfoList() { Portinfo *cp = top; while (cp) { Portinfo *np = cp->next; delete cp; cp = np; } } void set(PortinfoList *p) { top = p->top; cp = p->cp; rrp = p->rrp; } int isEnable() { return top ? 1 : 0; } void add(Portinfo *p) { p->next = 0; if (!cp) { top = cp = p; } else { cp->next = p; cp = p; } } void debug(); Portinfo *getPortinfo() { if(!rrp) rrp = top; else { rrp = rrp->next; if (!rrp) rrp = top; } return rrp; } struct sockaddr *getSockAddr() { return top->getSockAddr(); } SOCKADDR_IN *getSockAddrIn() { return top->getSockAddrIn(); } }; #endif /* __portinfo_h_ */