15c10afb9Smrg
25c10afb9Smrg/*
35c10afb9SmrgCopyright 1996, 1998  The Open Group
45c10afb9Smrg
55c10afb9SmrgPermission to use, copy, modify, distribute, and sell this software and its
65c10afb9Smrgdocumentation for any purpose is hereby granted without fee, provided that
75c10afb9Smrgthe above copyright notice appear in all copies and that both that
85c10afb9Smrgcopyright notice and this permission notice appear in supporting
95c10afb9Smrgdocumentation.
105c10afb9Smrg
115c10afb9SmrgThe above copyright notice and this permission notice shall be included
125c10afb9Smrgin all copies or substantial portions of the Software.
135c10afb9Smrg
145c10afb9SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
155c10afb9SmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
165c10afb9SmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
175c10afb9SmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
185c10afb9SmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
195c10afb9SmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
205c10afb9SmrgOTHER DEALINGS IN THE SOFTWARE.
215c10afb9Smrg
225c10afb9SmrgExcept as contained in this notice, the name of The Open Group shall
235c10afb9Smrgnot be used in advertising or otherwise to promote the sale, use or
245c10afb9Smrgother dealings in this Software without prior written authorization
255c10afb9Smrgfrom The Open Group.
265c10afb9Smrg*/
275c10afb9Smrg
285c10afb9Smrg
295c10afb9Smrg#include <X11/ICE/ICElib.h>
305c10afb9Smrg
315c10afb9Smrg
325c10afb9Smrgtypedef struct _server_list {
335c10afb9Smrg    char *serverAddress;
345c10afb9Smrg    struct _server_list *next;
355c10afb9Smrg} server_list;
365c10afb9Smrg
375c10afb9Smrg
385c10afb9Smrgtypedef struct _request_list {
395c10afb9Smrg    char *serviceName;
405c10afb9Smrg    char *serverAddress;
415c10afb9Smrg    char *hostAddress;
425c10afb9Smrg    char *startOptions;
435c10afb9Smrg    PMconn *requestor;
445c10afb9Smrg    char *listData;
455c10afb9Smrg    int authLen;
465c10afb9Smrg    char *authName;
475c10afb9Smrg    char *authData;
485c10afb9Smrg    struct _request_list *next;
495c10afb9Smrg} request_list;
505c10afb9Smrg
515c10afb9Smrg
525c10afb9Smrgtypedef struct _running_proxy {
535c10afb9Smrg    Bool active;
545c10afb9Smrg    PMconn *pmConn;
555c10afb9Smrg    request_list *requests;
565c10afb9Smrg    server_list *servers;
575c10afb9Smrg    Bool refused_service;
585c10afb9Smrg    struct _running_proxy *next;
595c10afb9Smrg} running_proxy;
605c10afb9Smrg
615c10afb9Smrg
625c10afb9Smrgtypedef struct _proxy_service {
635c10afb9Smrg    char *serviceName;
645c10afb9Smrg    int proxyCount;
655c10afb9Smrg    running_proxy *proxyList;
665c10afb9Smrg    struct _proxy_service *next;
675c10afb9Smrg} proxy_service;
685c10afb9Smrg
695c10afb9Smrg
705c10afb9Smrgtypedef struct {
715c10afb9Smrg    int count;
725c10afb9Smrg    int current;
735c10afb9Smrg    running_proxy **list;
745c10afb9Smrg} running_proxy_list;
755c10afb9Smrg
765c10afb9Smrg
775c10afb9Smrg
785c10afb9Smrgproxy_service
795c10afb9Smrg*FindProxyService (
805c10afb9Smrg	char *serviceName,
815c10afb9Smrg	Bool createIf);
825c10afb9Smrg
835c10afb9Smrgrunning_proxy *
845c10afb9SmrgStartNewProxy (
855c10afb9Smrg	char *serviceName,
865c10afb9Smrg	char *startCommand);
875c10afb9Smrg
885c10afb9Smrgrunning_proxy *
895c10afb9SmrgConnectToProxy (
905c10afb9Smrg	int pmOpcode,
915c10afb9Smrg	char *serviceName,
925c10afb9Smrg	char *proxyAddress);
935c10afb9Smrg
945c10afb9SmrgStatus
955c10afb9SmrgActivateProxyService (
965c10afb9Smrg	char *serviceName,
975c10afb9Smrg	PMconn *proxy);
985c10afb9Smrg
995c10afb9Smrgvoid
1005c10afb9SmrgProxyGone (
1015c10afb9Smrg    IceConn proxyIceConn,
1025c10afb9Smrg    Bool *activeReqs);
1035c10afb9Smrg
1045c10afb9Smrgrunning_proxy_list *
1055c10afb9SmrgGetRunningProxyList (
1065c10afb9Smrg	char *serviceName,
1075c10afb9Smrg	char *serverAddress);
1085c10afb9Smrg
1095c10afb9Smrgvoid
1105c10afb9SmrgFreeProxyList (
1115c10afb9Smrg	running_proxy_list *list);
1125c10afb9Smrg
1135c10afb9SmrgStatus
1145c10afb9SmrgPushRequestorQueue (
1155c10afb9Smrg	running_proxy *proxy,
1165c10afb9Smrg	PMconn *requestor,
1175c10afb9Smrg	running_proxy_list *runList,
1185c10afb9Smrg	char *serviceName,
1195c10afb9Smrg	char *serverAddress,
1205c10afb9Smrg	char *hostAddress,
1215c10afb9Smrg	char *startOptions,
1225c10afb9Smrg	int authLen,
1235c10afb9Smrg	char *authName,
1245c10afb9Smrg	char *authData);
1255c10afb9Smrg
1265c10afb9Smrg
1275c10afb9SmrgStatus
1285c10afb9SmrgPeekRequestorQueue (
1295c10afb9Smrg	PMconn *proxy,
1305c10afb9Smrg	PMconn **requestor,
1315c10afb9Smrg	running_proxy_list **runList,
1325c10afb9Smrg	char **serviceName,
1335c10afb9Smrg	char **serverAddress,
1345c10afb9Smrg	char **hostAddress,
1355c10afb9Smrg	char **startOptions,
1365c10afb9Smrg	int *authLen,
1375c10afb9Smrg	char **authName,
1385c10afb9Smrg	char **authData);
1395c10afb9Smrg
1405c10afb9SmrgPMconn*
1415c10afb9SmrgPopRequestorQueue (
1425c10afb9Smrg	PMconn *pmConn,
1435c10afb9Smrg	Bool addServer,
1445c10afb9Smrg	Bool freeProxyList);
1455c10afb9Smrg
1465c10afb9Smrgrunning_proxy *
1475c10afb9SmrgProxyForPMconn(
1485c10afb9Smrg	PMconn *pmConn);
149