register.c revision 266e564d
1266e564dSmrg/* $Xorg: register.c,v 1.4 2001/02/09 02:03:26 xorgcvs Exp $ */ 2266e564dSmrg/****************************************************************************** 3266e564dSmrg 4266e564dSmrg 5266e564dSmrgCopyright 1993, 1998 The Open Group 6266e564dSmrg 7266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its 8266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that 9266e564dSmrgthe above copyright notice appear in all copies and that both that 10266e564dSmrgcopyright notice and this permission notice appear in supporting 11266e564dSmrgdocumentation. 12266e564dSmrg 13266e564dSmrgThe above copyright notice and this permission notice shall be included in 14266e564dSmrgall copies or substantial portions of the Software. 15266e564dSmrg 16266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22266e564dSmrg 23266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be 24266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings 25266e564dSmrgin this Software without prior written authorization from The Open Group. 26266e564dSmrg 27266e564dSmrgAuthor: Ralph Mor, X Consortium 28266e564dSmrg******************************************************************************/ 29266e564dSmrg 30266e564dSmrg#ifdef HAVE_CONFIG_H 31266e564dSmrg#include <config.h> 32266e564dSmrg#endif 33266e564dSmrg#include <X11/ICE/ICElib.h> 34266e564dSmrg#include "ICElibint.h" 35266e564dSmrg 36266e564dSmrgint 37266e564dSmrgIceRegisterForProtocolSetup (protocolName, vendor, release, 38266e564dSmrg versionCount, versionRecs, authCount, authNames, authProcs, IOErrorProc) 39266e564dSmrg 40266e564dSmrgchar *protocolName; 41266e564dSmrgchar *vendor; 42266e564dSmrgchar *release; 43266e564dSmrgint versionCount; 44266e564dSmrgIcePoVersionRec *versionRecs; 45266e564dSmrgint authCount; 46266e564dSmrgchar **authNames; 47266e564dSmrgIcePoAuthProc *authProcs; 48266e564dSmrgIceIOErrorProc IOErrorProc; 49266e564dSmrg 50266e564dSmrg{ 51266e564dSmrg _IcePoProtocol *p; 52266e564dSmrg int opcodeRet, i; 53266e564dSmrg 54266e564dSmrg for (i = 1; i <= _IceLastMajorOpcode; i++) 55266e564dSmrg if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0) 56266e564dSmrg { 57266e564dSmrg if (_IceProtocols[i - 1].orig_client != NULL) 58266e564dSmrg { 59266e564dSmrg /* 60266e564dSmrg * We've already registered this protocol. 61266e564dSmrg */ 62266e564dSmrg 63266e564dSmrg return (i); 64266e564dSmrg } 65266e564dSmrg else 66266e564dSmrg { 67266e564dSmrg break; 68266e564dSmrg } 69266e564dSmrg } 70266e564dSmrg 71266e564dSmrg if (i <= _IceLastMajorOpcode) 72266e564dSmrg { 73266e564dSmrg p = _IceProtocols[i - 1].orig_client = 74266e564dSmrg (_IcePoProtocol *) malloc (sizeof (_IcePoProtocol)); 75266e564dSmrg opcodeRet = i; 76266e564dSmrg } 77266e564dSmrg else if (_IceLastMajorOpcode == 255 || 78266e564dSmrg versionCount < 1 || 79266e564dSmrg strlen (protocolName) == 0) 80266e564dSmrg { 81266e564dSmrg return (-1); 82266e564dSmrg } 83266e564dSmrg else 84266e564dSmrg { 85266e564dSmrg char *name; 86266e564dSmrg 87266e564dSmrg _IceProtocols[_IceLastMajorOpcode].protocol_name = name = 88266e564dSmrg strdup(protocolName); 89266e564dSmrg 90266e564dSmrg p = _IceProtocols[_IceLastMajorOpcode].orig_client = 91266e564dSmrg (_IcePoProtocol *) malloc (sizeof (_IcePoProtocol)); 92266e564dSmrg 93266e564dSmrg _IceProtocols[_IceLastMajorOpcode].accept_client = NULL; 94266e564dSmrg 95266e564dSmrg opcodeRet = ++_IceLastMajorOpcode; 96266e564dSmrg } 97266e564dSmrg 98266e564dSmrg p->vendor = strdup(vendor); 99266e564dSmrg p->release = strdup(release); 100266e564dSmrg 101266e564dSmrg p->version_count = versionCount; 102266e564dSmrg 103266e564dSmrg p->version_recs = (IcePoVersionRec *) malloc ( 104266e564dSmrg versionCount * sizeof (IcePoVersionRec)); 105266e564dSmrg memcpy (p->version_recs, versionRecs, 106266e564dSmrg versionCount * sizeof (IcePoVersionRec)); 107266e564dSmrg 108266e564dSmrg if ((p->auth_count = authCount) > 0) 109266e564dSmrg { 110266e564dSmrg p->auth_names = (char **) malloc ( 111266e564dSmrg authCount * sizeof (char *)); 112266e564dSmrg 113266e564dSmrg p->auth_procs = (IcePoAuthProc *) malloc ( 114266e564dSmrg authCount * sizeof (IcePoAuthProc)); 115266e564dSmrg 116266e564dSmrg for (i = 0; i < authCount; i++) 117266e564dSmrg { 118266e564dSmrg p->auth_names[i] = strdup(authNames[i]); 119266e564dSmrg p->auth_procs[i] = authProcs[i]; 120266e564dSmrg } 121266e564dSmrg } 122266e564dSmrg else 123266e564dSmrg { 124266e564dSmrg p->auth_names = NULL; 125266e564dSmrg p->auth_procs = NULL; 126266e564dSmrg } 127266e564dSmrg 128266e564dSmrg p->io_error_proc = IOErrorProc; 129266e564dSmrg 130266e564dSmrg return (opcodeRet); 131266e564dSmrg} 132266e564dSmrg 133266e564dSmrg 134266e564dSmrg 135266e564dSmrgint 136266e564dSmrgIceRegisterForProtocolReply (protocolName, vendor, release, 137266e564dSmrg versionCount, versionRecs, authCount, authNames, authProcs, 138266e564dSmrg hostBasedAuthProc, protocolSetupProc, protocolActivateProc, 139266e564dSmrg IOErrorProc) 140266e564dSmrg 141266e564dSmrgchar *protocolName; 142266e564dSmrgchar *vendor; 143266e564dSmrgchar *release; 144266e564dSmrgint versionCount; 145266e564dSmrgIcePaVersionRec *versionRecs; 146266e564dSmrgint authCount; 147266e564dSmrgchar **authNames; 148266e564dSmrgIcePaAuthProc *authProcs; 149266e564dSmrgIceHostBasedAuthProc hostBasedAuthProc; 150266e564dSmrgIceProtocolSetupProc protocolSetupProc; 151266e564dSmrgIceProtocolActivateProc protocolActivateProc; 152266e564dSmrgIceIOErrorProc IOErrorProc; 153266e564dSmrg 154266e564dSmrg{ 155266e564dSmrg _IcePaProtocol *p; 156266e564dSmrg int opcodeRet, i; 157266e564dSmrg 158266e564dSmrg for (i = 1; i <= _IceLastMajorOpcode; i++) 159266e564dSmrg if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0) 160266e564dSmrg { 161266e564dSmrg if (_IceProtocols[i - 1].accept_client != NULL) 162266e564dSmrg { 163266e564dSmrg /* 164266e564dSmrg * We've already registered this protocol. 165266e564dSmrg */ 166266e564dSmrg 167266e564dSmrg return (i); 168266e564dSmrg } 169266e564dSmrg else 170266e564dSmrg { 171266e564dSmrg break; 172266e564dSmrg } 173266e564dSmrg } 174266e564dSmrg 175266e564dSmrg 176266e564dSmrg if (i <= _IceLastMajorOpcode) 177266e564dSmrg { 178266e564dSmrg p = _IceProtocols[i - 1].accept_client = 179266e564dSmrg (_IcePaProtocol *) malloc (sizeof (_IcePaProtocol)); 180266e564dSmrg opcodeRet = i; 181266e564dSmrg } 182266e564dSmrg else if (_IceLastMajorOpcode == 255 || 183266e564dSmrg versionCount < 1 || 184266e564dSmrg strlen (protocolName) == 0) 185266e564dSmrg { 186266e564dSmrg return (-1); 187266e564dSmrg } 188266e564dSmrg else 189266e564dSmrg { 190266e564dSmrg char *name; 191266e564dSmrg 192266e564dSmrg _IceProtocols[_IceLastMajorOpcode].protocol_name = name = 193266e564dSmrg strdup(protocolName); 194266e564dSmrg 195266e564dSmrg _IceProtocols[_IceLastMajorOpcode].orig_client = NULL; 196266e564dSmrg 197266e564dSmrg p = _IceProtocols[_IceLastMajorOpcode].accept_client = 198266e564dSmrg (_IcePaProtocol *) malloc (sizeof (_IcePaProtocol)); 199266e564dSmrg 200266e564dSmrg opcodeRet = ++_IceLastMajorOpcode; 201266e564dSmrg } 202266e564dSmrg 203266e564dSmrg p->vendor = strdup(vendor); 204266e564dSmrg p->release = strdup(release); 205266e564dSmrg 206266e564dSmrg p->version_count = versionCount; 207266e564dSmrg 208266e564dSmrg p->version_recs = (IcePaVersionRec *) malloc ( 209266e564dSmrg versionCount * sizeof (IcePaVersionRec)); 210266e564dSmrg memcpy (p->version_recs, versionRecs, 211266e564dSmrg versionCount * sizeof (IcePaVersionRec)); 212266e564dSmrg 213266e564dSmrg p->protocol_setup_proc = protocolSetupProc; 214266e564dSmrg p->protocol_activate_proc = protocolActivateProc; 215266e564dSmrg 216266e564dSmrg if ((p->auth_count = authCount) > 0) 217266e564dSmrg { 218266e564dSmrg p->auth_names = (char **) malloc ( 219266e564dSmrg authCount * sizeof (char *)); 220266e564dSmrg 221266e564dSmrg p->auth_procs = (IcePaAuthProc *) malloc ( 222266e564dSmrg authCount * sizeof (IcePaAuthProc)); 223266e564dSmrg 224266e564dSmrg for (i = 0; i < authCount; i++) 225266e564dSmrg { 226266e564dSmrg p->auth_names[i] = strdup(authNames[i]); 227266e564dSmrg p->auth_procs[i] = authProcs[i]; 228266e564dSmrg } 229266e564dSmrg } 230266e564dSmrg else 231266e564dSmrg { 232266e564dSmrg p->auth_names = NULL; 233266e564dSmrg p->auth_procs = NULL; 234266e564dSmrg } 235266e564dSmrg 236266e564dSmrg p->host_based_auth_proc = hostBasedAuthProc; 237266e564dSmrg 238266e564dSmrg p->io_error_proc = IOErrorProc; 239266e564dSmrg 240266e564dSmrg return (opcodeRet); 241266e564dSmrg} 242266e564dSmrg 243