/*-------------------------------------------------------------*/ /*************************************************************** * An port range is of the form : * * portinf portsup * * 123 : 123 123 * * 123-124 : 123 124 * * * * An netwib_ports is of the form : * * port,port,portrange,portrange * * all,!port,!portrange * * * * Complete examples : * * 123 * * 123-125 * * 1234,5678 * * 1234,12356-12358 * * all,!1234,!1244-1246 * ***************************************************************/ /*-------------------------------------------------------------*/ /*************************************************************** * Those functions ignores following error cases : * * - if we try to add a value already in the list * * - if we try to remove a value not in the list * ***************************************************************/ /*-------------------------------------------------------------*/ typedef struct netwib_ports netwib_ports; typedef const netwib_ports netwib_constports; /*-------------------------------------------------------------*/ /* Name : netwib_ports_init Description : Initialize a netwib_ports used to store port list. Input parameter(s) : inittype : if future added items will be sorted and/or unique Input/output parameter(s) : Output parameter(s) : **ppports : netwib_ports allocated and initialized Normal return values : NETWIB_ERR_OK : ok */ typedef enum { NETWIB_PORTS_INITTYPE_SORTUNIQ = 1, /* sorted and unique */ NETWIB_PORTS_INITTYPE_NOTSORTUNIQ = 2, /* not sorted and unique */ NETWIB_PORTS_INITTYPE_NOTSORTNOTUNIQ = 3 /* not sorted and not unique (duplicates are not removed) */ } netwib_ports_inittype; netwib_err netwib_ports_init(netwib_ports_inittype inittype, netwib_ports **ppports); #define netwib_ports_initdefault(ppports) netwib_ports_init(NETWIB_PORTS_INITTYPE_SORTUNIQ,ppports) /*-------------------------------------------------------------*/ /* Name : netwib_ports_close Description : Close a netwib_ports. Input parameter(s) : Input/output parameter(s) : **ppports : netwib_ports closed Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_close(netwib_ports **ppports); /*-------------------------------------------------------------*/ /* Name : netwib_ports_add_port Description : Add a port to the netwib_ports. Input parameter(s) : port : address to add Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_add_port(netwib_ports *pports, netwib_port port); /*-------------------------------------------------------------*/ /* Name : netwib_ports_add_portrange Description : Add a range of ports to the netwib_ports. Input parameter(s) : infport : inferior port support : superior port Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_add_portrange(netwib_ports *pports, netwib_port infport, netwib_port support); /*-------------------------------------------------------------*/ /* Name : netwib_ports_add_ports Description : Add a list of port to the netwib_ports. Input parameter(s) : *pportstoadd : netwib_ports to add Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_add_ports(netwib_ports *pports, netwib_constports *pportstoadd); /*-------------------------------------------------------------*/ /* Name : netwib_ports_add_buf Description : Update a netwib_ports with a string like "1234-1235". Input parameter(s) : *pbuf : buffer containing string Input/output parameter(s) : *pports : netwib_ports updated Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok Note : If an error occurs during insertion, result will only contain partial data. It's developer's job to use a temporary netwib_ports to deal with such errors. */ netwib_err netwib_ports_add_buf(netwib_ports *pports, netwib_constbuf *pbuf); /*-------------------------------------------------------------*/ /* Name : netwib_ports_add_kbd Description : Update a netwib_ports with data entered through keyboard. Input parameter(s) : message : message to print before defaultlist : default list to use if user enters nothing if NULL, there is no default Input/output parameter(s) : *pports : netwib_ports updated Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_add_kbd(netwib_ports *pports, netwib_constbuf *pmessage, netwib_constbuf *pdefaultlist); /*-------------------------------------------------------------*/ /* Name : netwib_ports_del_port Description : Del a port from the netwib_ports. Input parameter(s) : port : address to delete Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_del_port(netwib_ports *pports, netwib_port port); /*-------------------------------------------------------------*/ /* Name : netwib_ports_del_portrange Description : Del a range of ports to the netwib_ports. Input parameter(s) : infport : inferior port support : superior port Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_del_portrange(netwib_ports *pports, netwib_port infport, netwib_port support); /*-------------------------------------------------------------*/ /* Name : netwib_ports_del_ports Description : Remove a list of port to the netwib_ports. Input parameter(s) : *pportstodel : netwib_ports to remove Input/output parameter(s) : *pports : netwib_ports where to work Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_del_ports(netwib_ports *pports, netwib_constports *pportstodel); /*-------------------------------------------------------------*/ /* Name : netwib_ports_contains_xyz Description : Check if a netwib_port is in the list. Input parameter(s) : port : netwib_port to find Input/output parameter(s) : *pports : netwib_ports containing the list of addresses Output parameter(s) : *pyes : true if netwib_port is found Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ports_contains_port(netwib_constports *pports, netwib_port port, netwib_bool *pyes); netwib_err netwib_ports_contains_portrange(netwib_constports *pports, netwib_port infport, netwib_port support, netwib_bool *pyes); /*-------------------------------------------------------------*/ /* Name : netwib_buf_append_ports Description : Append a string representing a netwib_ports. Input parameter(s) : *pports : netwib_ports to append Input/output parameter(s) : pbuf : buffer updated Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_buf_append_ports(netwib_constports *pports, netwib_buf *pbuf);