⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genior.cc

📁 编译工具
💻 CC
字号:
// -*- Mode: C++; -*-//                          Package   : genior// genior.cc                Author    : Eoin Carroll (ewc)////    Copyright (C) 1997-1999 AT&T Laboratories Cambridge////  This file is part of genior.////  Genior is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,//  USA.//////// Program to generate IORs#include <string.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <omniORB4/CORBA.h>#ifdef HAVE_STD#  include <iostream>   using namespace std;#else#  include <iostream.h>#endif#ifdef HAVE_UNISTD_H#  include <unistd.h>#endif#include <ctype.h>static GIOP::Version giop_version = { 1,2 };static CORBA::Boolean extra_profiles = 1;static char* genRef(const char* IRTypeId, const char* hostname, 		    int port,  const char* objectid, int hex);static void usage(char* progname){  cerr << "usage: " << progname << " [-x] <IR Type ID> <hostname> <port> [object key]" << endl;  cerr << "         flag:" << endl;  cerr << "               -x interpret object key as a hexadecimal value." << endl;}#ifdef HAVE_GETOPTextern char* optarg;extern int optind;#else// WIN32 doesn't have an implementation of getopt() - // supply a getopt() for this program:char* optarg;int optind = 1;intgetopt(int num_args, char* const* args, const char* optstring){  if (optind == num_args) return EOF;  char* buf_left = *(args+optind);  if ((*buf_left != '-' && *buf_left != '/') || buf_left == NULL ) return EOF;  else if ((optind < (num_args-1)) && strcmp(buf_left,"-") == 0 && 	   strcmp(*(args+optind+1),"-") == 0)    {      optind+=2;      return EOF;    }  else if (strcmp(buf_left,"-") == 0)    {      optind++;      return '?';    }  for(int count = 0; count < strlen(optstring); count++)    {      if (optstring[count] == ':') continue;      if (buf_left[1] == optstring[count])	{	  if(optstring[count+1] == ':')	    {	      if (strlen(buf_left) > 2)		{		  optarg = (buf_left+2);		  optind++;		}	      else if (optind < (num_args-1))		{		  optarg = *(args+optind+1);		  optind+=2;		}	      else		{		  optind++;		  return '?';		}	    }	  else optind++;	  	  return buf_left[1];	}    }  optind++;  return '?';}#endifint main(int argc, char* argv[]){  if (argc < 4) {    usage(argv[0]);    return 1;  }	  // Get options:  int c;  int hexflag = 0;  while((c = getopt(argc,argv,"x")) != EOF) {    switch(c) {    case 'x':      hexflag = 1;      break;    case '?':      {	usage(argv[0]);	return 1;      }    }  }	    int port;  CORBA::String_var IRTypeId, hostname, objKey;  if (hexflag) {    if (argc < 6) {      usage(argv[0]);      return 1;    }    IRTypeId = CORBA::string_dup(argv[2]);    hostname = CORBA::string_dup(argv[3]);    port = atoi(argv[4]);    objKey = CORBA::string_dup(argv[5]);  }  else {    if (argc < 4) {      usage(argv[0]);      return 1;    }    IRTypeId = CORBA::string_dup(argv[1]);    hostname = CORBA::string_dup(argv[2]);    port = atoi(argv[3]);        if (argc >= 5)      objKey = CORBA::string_dup(argv[4]);  }  if (port == 0) {    cerr << "Port number is invalid." << endl;    return 1;  }  CORBA::String_var ior;  try {    ior = genRef(IRTypeId, hostname, port, objKey, hexflag);  }  catch(...) {    cerr << "Unexpected exception caught. Abort." << endl;    return 1;  }  if ((const char*)ior) {    cout << (const char*) ior << endl;    return 0;  }  else {    return 1;  }}staticchar*genRef(const char* IRTypeId, const char* hostname, int port,        const char* objKey, int hex){  CORBA::ORB_var orb;  int argc = 0;    orb = CORBA::ORB_init(argc,0,"omniORB4");  IIOP::Address addrs;  addrs.host = hostname;  addrs.port = port;  omniORB::seqOctets* keySeed;  if (objKey == 0)    {      // No key specified - generate one.      omniORB::objectKey k;      omniORB::generateNewKey(k);      keySeed = omniORB::keyToOctetSequence(k);    }  else {    // Use key given.    if (!hex) {      // Key is a text value.      keySeed = new omniORB::seqOctets;      keySeed->length(strlen(objKey));      unsigned int j;      for (j=0; j<strlen(objKey); j++)	(*keySeed)[j] = (CORBA::Octet) objKey[j];    }    else {      // Interpret key as hexadecimal      if ((objKey[0] != '0' || objKey[1] !='x')) {	cerr << "A hexadecimal key should be prefixed by 0x" << endl;	return 0;      }      else if ( (strlen(objKey)%2) != 0) {	cerr << "Hexadecimal key is corrupted." << endl;	return 0;      }	      keySeed = new omniORB::seqOctets;      keySeed->length((strlen(objKey)/2)-1);      unsigned int j;      for (j=2; j < strlen(objKey); j+=2) {	char curr = (int) tolower(objKey[j]);	int hi,lo;		if (curr >= '0' && curr <= '9')	  hi = ((curr - '0') << 4);	else if (curr >= 'a' && curr <='f')	  hi = ((curr - 'a' + 10) << 4);	else {	  cerr << "Hexadecimal key is corrupted." << endl;	  return 0;	}	curr = tolower(objKey[j+1]);	if (curr >= '0' && curr <= '9')	  lo = curr - '0';	else if (curr >= 'a' && curr <='f')	  lo = curr - 'a' + 10;	else {	  cerr << "Hexadecimal key is corrupted." << endl;	  return 0;	}	(*keySeed)[(j/2)-1] = (CORBA::Octet) (hi + lo);      }    }  }    omniIOR* ior = new omniIOR(IRTypeId,*keySeed,&addrs,1,giop_version,			     ((extra_profiles) ? omniIOR::DefaultInterceptors			                       : omniIOR::NoInterceptor));  omniObjRef* objref = omni::createObjRef(CORBA::Object::_PD_repoId,ior,0);    CORBA::String_var result;  result = omniObjRef::_toString(objref);    return result._retn();}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -