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