/* * slp_reg.c * NSLPlugins * * Created by karnold on Fri Nov 10 2000. * Copyright (c) 2000 __CompanyName__. All rights reserved. * */ #include #include #include #include #include #include #include #include "slp.h" #include "SLPDefines.h" #include "SLPComm.h" OSStatus DoSLPRegistration( char* scopeList, UInt32 scopeListLen, char* url, UInt32 urlLen, char* attributeList, UInt32 attributeListLen ); OSStatus DoSLPDeregistration( char* scopeList, UInt32 scopeListLen, char* url, UInt32 urlLen ); void PrintHelpInfo( void ); #define kMaxURLLen 1024 #define kMaxAttributeLen 1024 #define kMaxArgs 7 // [-r url] [-d url] [-a attribute_list] [-l] int main(int argc, char *argv[]) { char* scope = ""; UInt32 scopeLen = strlen(scope); char url[kMaxURLLen] = {0}; UInt32 urlLen = 0; char attributeList[kMaxAttributeLen] = {0}; UInt32 attributeListLen = 0; Boolean regFlagSet = false, deregFlagSet = false, listFlagSet = false, attributeFlagSet = false; OSStatus status = 0; if ( argc > kMaxArgs || argc == 0 ) { PrintHelpInfo(); return -1; } for ( int i=1; i= kMaxURLLen ) { PrintHelpInfo(); return -1; } else strcpy( url, argv[i] ); if ( strcmp(argv[i-1], "-r") == 0 ) regFlagSet = true; else deregFlagSet = true; } else if ( i >=2 && strcmp(argv[i], "-a") == 0 && !attributeFlagSet ) { if ( !regFlagSet && !deregFlagSet ) { PrintHelpInfo(); return -1; } i++; // increment this as the next attribute is the url and we want the for loop to skip this attributeListLen = strlen(argv[i]); if ( attributeListLen >= kMaxAttributeLen ) { PrintHelpInfo(); return -1; } else { strcpy( attributeList, argv[i] ); } attributeFlagSet = true; } else if ( strcmp(argv[i], "-l") == 0 ) { listFlagSet = true; } else { PrintHelpInfo(); return -1; } } if ( regFlagSet ) status = DoSLPRegistration( scope, scopeLen, url, urlLen, attributeList, attributeListLen ); else if ( deregFlagSet ) status = DoSLPDeregistration( scope, scopeLen, url, urlLen ); if ( listFlagSet ) { // we'll need to print out currently registered services here fprintf( stderr, "we'll need to print out currently registered services here" ); } return status; } OSStatus DoSLPRegistration( char* scopeList, UInt32 scopeListLen, char* url, UInt32 urlLen, char* attributeList, UInt32 attributeListLen ) { char* dataBuffer = NULL; char* returnBuffer = NULL; UInt32 dataBufferLen = 0; UInt32 returnBufferLen = 0; OSStatus status = noErr; dataBuffer = MakeSLPRegistrationDataBuffer ( scopeList, scopeListLen, url, urlLen, attributeList, attributeListLen, &dataBufferLen ); if ( dataBuffer ) { status = SendDataToSLPd( dataBuffer, dataBufferLen, &returnBuffer, &returnBufferLen ); } else status = memFullErr; // now check for any message status if ( !status && returnBuffer && returnBufferLen > 0 ) status = ((SLPdMessageHeader*)returnBuffer)->messageStatus; return status; } OSStatus DoSLPDeregistration( char* scopeList, UInt32 scopeListLen, char* url, UInt32 urlLen ) { char* dataBuffer = NULL; char* returnBuffer = NULL; UInt32 dataBufferLen = 0; UInt32 returnBufferLen = 0; OSStatus status = noErr; dataBuffer = MakeSLPDeregistrationDataBuffer ( scopeList, scopeListLen, url, urlLen, &dataBufferLen ); if ( dataBuffer ) { status = SendDataToSLPd( dataBuffer, dataBufferLen, &returnBuffer, &returnBufferLen ); } else status = memFullErr; // now check for any message status if ( !status && returnBuffer && returnBufferLen > 0 ) status = ((SLPdMessageHeader*)returnBuffer)->messageStatus; return status; } void PrintHelpInfo( void ) { fprintf( stderr, "Usage: slp_reg [-r|d ] [-a ] [-l]\n" " where each of the following is optional:\n" " -r is a url the user wishes to register\n" " -d is a url the user wishes to deregister\n" " -a is a slp attribute list e.g. \"(a=1,2),boo,(c=false)\"\n" " -l to receive as output a list of currently registered items (after tool is complete)\n" ); }