register.c revision c5629e66
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 37c5629e66SmrgIceRegisterForProtocolSetup ( 38c5629e66Smrg char *protocolName, 39c5629e66Smrg char *vendor, 40c5629e66Smrg char *release, 41c5629e66Smrg int versionCount, 42c5629e66Smrg IcePoVersionRec *versionRecs, 43c5629e66Smrg int authCount, 44c5629e66Smrg const char **authNames, 45c5629e66Smrg IcePoAuthProc *authProcs, 46c5629e66Smrg IceIOErrorProc IOErrorProc 47c5629e66Smrg) 48266e564dSmrg{ 49266e564dSmrg _IcePoProtocol *p; 50266e564dSmrg int opcodeRet, i; 51266e564dSmrg 52266e564dSmrg for (i = 1; i <= _IceLastMajorOpcode; i++) 53266e564dSmrg if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0) 54266e564dSmrg { 55266e564dSmrg if (_IceProtocols[i - 1].orig_client != NULL) 56266e564dSmrg { 57266e564dSmrg /* 58266e564dSmrg * We've already registered this protocol. 59266e564dSmrg */ 60266e564dSmrg 61266e564dSmrg return (i); 62266e564dSmrg } 63266e564dSmrg else 64266e564dSmrg { 65266e564dSmrg break; 66266e564dSmrg } 67266e564dSmrg } 68266e564dSmrg 69266e564dSmrg if (i <= _IceLastMajorOpcode) 70266e564dSmrg { 71266e564dSmrg p = _IceProtocols[i - 1].orig_client = 72266e564dSmrg (_IcePoProtocol *) malloc (sizeof (_IcePoProtocol)); 73266e564dSmrg opcodeRet = i; 74266e564dSmrg } 75266e564dSmrg else if (_IceLastMajorOpcode == 255 || 76266e564dSmrg versionCount < 1 || 77266e564dSmrg strlen (protocolName) == 0) 78266e564dSmrg { 79266e564dSmrg return (-1); 80266e564dSmrg } 81266e564dSmrg else 82266e564dSmrg { 83266e564dSmrg char *name; 84266e564dSmrg 85266e564dSmrg _IceProtocols[_IceLastMajorOpcode].protocol_name = name = 86266e564dSmrg strdup(protocolName); 87266e564dSmrg 88266e564dSmrg p = _IceProtocols[_IceLastMajorOpcode].orig_client = 89266e564dSmrg (_IcePoProtocol *) malloc (sizeof (_IcePoProtocol)); 90266e564dSmrg 91266e564dSmrg _IceProtocols[_IceLastMajorOpcode].accept_client = NULL; 92266e564dSmrg 93266e564dSmrg opcodeRet = ++_IceLastMajorOpcode; 94266e564dSmrg } 95266e564dSmrg 96266e564dSmrg p->vendor = strdup(vendor); 97266e564dSmrg p->release = strdup(release); 98266e564dSmrg 99266e564dSmrg p->version_count = versionCount; 100266e564dSmrg 101266e564dSmrg p->version_recs = (IcePoVersionRec *) malloc ( 102266e564dSmrg versionCount * sizeof (IcePoVersionRec)); 103266e564dSmrg memcpy (p->version_recs, versionRecs, 104266e564dSmrg versionCount * sizeof (IcePoVersionRec)); 105266e564dSmrg 106266e564dSmrg if ((p->auth_count = authCount) > 0) 107266e564dSmrg { 108266e564dSmrg p->auth_names = (char **) malloc ( 109266e564dSmrg authCount * sizeof (char *)); 110266e564dSmrg 111266e564dSmrg p->auth_procs = (IcePoAuthProc *) malloc ( 112266e564dSmrg authCount * sizeof (IcePoAuthProc)); 113266e564dSmrg 114266e564dSmrg for (i = 0; i < authCount; i++) 115266e564dSmrg { 116266e564dSmrg p->auth_names[i] = strdup(authNames[i]); 117266e564dSmrg p->auth_procs[i] = authProcs[i]; 118266e564dSmrg } 119266e564dSmrg } 120266e564dSmrg else 121266e564dSmrg { 122266e564dSmrg p->auth_names = NULL; 123266e564dSmrg p->auth_procs = NULL; 124266e564dSmrg } 125266e564dSmrg 126266e564dSmrg p->io_error_proc = IOErrorProc; 127266e564dSmrg 128266e564dSmrg return (opcodeRet); 129266e564dSmrg} 130266e564dSmrg 131266e564dSmrg 132266e564dSmrg 133266e564dSmrgint 134c5629e66SmrgIceRegisterForProtocolReply ( 135c5629e66Smrg char *protocolName, 136c5629e66Smrg char *vendor, 137c5629e66Smrg char *release, 138c5629e66Smrg int versionCount, 139c5629e66Smrg IcePaVersionRec *versionRecs, 140c5629e66Smrg int authCount, 141c5629e66Smrg const char **authNames, 142c5629e66Smrg IcePaAuthProc *authProcs, 143c5629e66Smrg IceHostBasedAuthProc hostBasedAuthProc, 144c5629e66Smrg IceProtocolSetupProc protocolSetupProc, 145c5629e66Smrg IceProtocolActivateProc protocolActivateProc, 146c5629e66Smrg IceIOErrorProc IOErrorProc 147c5629e66Smrg) 148266e564dSmrg{ 149266e564dSmrg _IcePaProtocol *p; 150266e564dSmrg int opcodeRet, i; 151266e564dSmrg 152266e564dSmrg for (i = 1; i <= _IceLastMajorOpcode; i++) 153266e564dSmrg if (strcmp (protocolName, _IceProtocols[i - 1].protocol_name) == 0) 154266e564dSmrg { 155266e564dSmrg if (_IceProtocols[i - 1].accept_client != NULL) 156266e564dSmrg { 157266e564dSmrg /* 158266e564dSmrg * We've already registered this protocol. 159266e564dSmrg */ 160266e564dSmrg 161266e564dSmrg return (i); 162266e564dSmrg } 163266e564dSmrg else 164266e564dSmrg { 165266e564dSmrg break; 166266e564dSmrg } 167266e564dSmrg } 168266e564dSmrg 169266e564dSmrg 170266e564dSmrg if (i <= _IceLastMajorOpcode) 171266e564dSmrg { 172266e564dSmrg p = _IceProtocols[i - 1].accept_client = 173266e564dSmrg (_IcePaProtocol *) malloc (sizeof (_IcePaProtocol)); 174266e564dSmrg opcodeRet = i; 175266e564dSmrg } 176266e564dSmrg else if (_IceLastMajorOpcode == 255 || 177266e564dSmrg versionCount < 1 || 178266e564dSmrg strlen (protocolName) == 0) 179266e564dSmrg { 180266e564dSmrg return (-1); 181266e564dSmrg } 182266e564dSmrg else 183266e564dSmrg { 184266e564dSmrg char *name; 185266e564dSmrg 186266e564dSmrg _IceProtocols[_IceLastMajorOpcode].protocol_name = name = 187266e564dSmrg strdup(protocolName); 188266e564dSmrg 189266e564dSmrg _IceProtocols[_IceLastMajorOpcode].orig_client = NULL; 190266e564dSmrg 191266e564dSmrg p = _IceProtocols[_IceLastMajorOpcode].accept_client = 192266e564dSmrg (_IcePaProtocol *) malloc (sizeof (_IcePaProtocol)); 193266e564dSmrg 194266e564dSmrg opcodeRet = ++_IceLastMajorOpcode; 195266e564dSmrg } 196266e564dSmrg 197266e564dSmrg p->vendor = strdup(vendor); 198266e564dSmrg p->release = strdup(release); 199266e564dSmrg 200266e564dSmrg p->version_count = versionCount; 201266e564dSmrg 202266e564dSmrg p->version_recs = (IcePaVersionRec *) malloc ( 203266e564dSmrg versionCount * sizeof (IcePaVersionRec)); 204266e564dSmrg memcpy (p->version_recs, versionRecs, 205266e564dSmrg versionCount * sizeof (IcePaVersionRec)); 206266e564dSmrg 207266e564dSmrg p->protocol_setup_proc = protocolSetupProc; 208266e564dSmrg p->protocol_activate_proc = protocolActivateProc; 209266e564dSmrg 210266e564dSmrg if ((p->auth_count = authCount) > 0) 211266e564dSmrg { 212266e564dSmrg p->auth_names = (char **) malloc ( 213266e564dSmrg authCount * sizeof (char *)); 214266e564dSmrg 215266e564dSmrg p->auth_procs = (IcePaAuthProc *) malloc ( 216266e564dSmrg authCount * sizeof (IcePaAuthProc)); 217266e564dSmrg 218266e564dSmrg for (i = 0; i < authCount; i++) 219266e564dSmrg { 220266e564dSmrg p->auth_names[i] = strdup(authNames[i]); 221266e564dSmrg p->auth_procs[i] = authProcs[i]; 222266e564dSmrg } 223266e564dSmrg } 224266e564dSmrg else 225266e564dSmrg { 226266e564dSmrg p->auth_names = NULL; 227266e564dSmrg p->auth_procs = NULL; 228266e564dSmrg } 229266e564dSmrg 230266e564dSmrg p->host_based_auth_proc = hostBasedAuthProc; 231266e564dSmrg 232266e564dSmrg p->io_error_proc = IOErrorProc; 233266e564dSmrg 234266e564dSmrg return (opcodeRet); 235266e564dSmrg} 236266e564dSmrg 237