Back to index

im-sdk  12.3.91
Public Types | Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Friends
IIIMProtocol Class Reference

#include <IIIMProtocol.hh>

Inheritance diagram for IIIMProtocol:
Inheritance graph
[legend]
Collaboration diagram for IIIMProtocol:
Collaboration graph
[legend]

List of all members.

Public Types

enum  IIIMP_ATTRTYPE {
  XimType_CARD8 = 1, XimType_CARD16 = 2, XimType_CARD32 = 3, XimType_STRING8 = 4,
  XimType_XIMStyles = 10, XimType_UTF16_STRING = 18, XimType_LISTOF_UTF16_STRING = 20
}
enum  CONTEXT_ID_SPECIAL { INVALID_CONTEXT_ID = 0xFFFF }
enum  CONCURRENCY_FLAGS { SYNC, ASYNC }
enum  IM_Attribute {
  ServerName = 1, TransportAddress = 2, VendorName = 3, PrimaryInputLocale = 4,
  LanguageList = 5, ConversionOnKeys = 6, ConversionOffKeys = 7, ProtocolHandler = 8,
  ObjectDescriptors = 9, IMEDescriptors = 10, DisplayConnection = 11, IFName = 12,
  AppName = 13, DisableStatusArea = 14, DefaultFontName = 15
}

Public Member Functions

virtual bool receive_and_dispatch (IMState *pims, int flags=SYNC)
virtual IMStateaccept (int flags=SYNC)
bool set_server_listen_address (IMSocketAddressVec &addrvec)
 IIIMProtocol (IMAccept *pima)
virtual ~IIIMProtocol ()
 IIIMProtocol (IMArg *, int)
 ~IIIMProtocol ()
int set_values (IMArg *, int)
int get_values (IMArg *, int)
int run ()
char byteOrder ()
int count_imattr ()
IMAttrget_imattr ()
int count_icattr ()
IMAttrget_icattr ()
int getICAttrIDFromName (const char *)
bool dispatch (CARD16BIT im_id, CARD16BIT ic_id, void *message)
int countOnKeys () const
int countOffKeys () const
IMTriggerKeygetOnKey (unsigned int index) const
IMTriggerKeygetOffKey (unsigned int index) const
int countLanguages () const
CompoundStringgetLang (unsigned int index) const
int countObjectDescriptors () const
IMObjectDescriptorStructgetObjectDescriptor (unsigned int index) const
IMObjectDescriptorStructgetFirstObjectDescriptor ()
IMObjectDescriptorStructgetNextObjectDescriptor ()
int countIME () const
IMEditorStructgetIME (unsigned int index) const
IMEditorStructgetFirstIME ()
IMEditorStructgetNextIME ()
const CompoundStringgetPrimaryLocale () const
IMTransAcceptgetIMTransAccept (IMTransListen *trans_listen) const

Public Attributes

const char * ICLocaleName
const char * ICCharSubsetsName
const char * ICEngineName
const char * IMListName
const char * IMClientName
const char * IMObjectListName
const char * IMCCDEFName
const char * IMGUIObjectName
const char * IMLWEObjectName
IMList< IIIMPClientiiimp_client_list
IMProtoHandlerproto_handler

Protected Types

enum  MODE { OPEN, SET, GET }
typedef map< CARD16BIT, IMState * > IMStateMap

Protected Member Functions

void add_imstate (IMState *pims)
void remove_imstate (IMState *pims)
IMStateget_imstate (CARD16BIT im_id)
ICStateget_icstate (CARD16BIT im_id, CARD16BIT ic_id)

Protected Attributes

IMAcceptpimaccept
IMStateMap immap
CompoundString protocol_name
CompoundString im_name
CompoundString im_address
CompoundString input_locale
CompoundString vendor_name
IMLanguageList lang_list
IMTriggerKeyList on_keys
IMTriggerKeyList off_keys
IMObjectDescriptorList od_list
IMEditorDescriptorList ime_list

Private Types

enum  IM_ATTRIBID {
  INPUTMETHOD_LIST = 0x1001, OBJECT_DESCRIPTER_LIST = 0x1010, CLIENT_DESCRIPTER = 0x1011, CCDEF = 0x1030,
  GUI_OBJECT = 0x1031, LWE_OBJECT = 0x1032
}
enum  IC_ATTRIBID { IC_INPUT_LANGUAGE = 1, IC_CHARACTER_SUBSETS = 2, IC_INPUT_METHOD = 3 }
typedef map< IIIMPTrans
*, IIIMP_IMState * > 
IIIMPClientMap

Private Member Functions

bool restart (IMSocketAddressVec &addrvec)
void init_attrList ()

Static Private Member Functions

static void * accept_loop (void *client_data)

Private Attributes

IMSocketListenpimsl
char im_byteOrder
IMTransListentrans_listen
int im_attr_num
IMAttrim_attr
int ic_attr_num
IMAttric_attr
IMListOfAttr Default_IM [10]
IMListOfAttr Default_IC [5]

Friends

class IMState

Detailed Description

Definition at line 11 of file IIIMProtocol.hh.


Member Typedef Documentation

Definition at line 15 of file IIIMProtocol.hh.

typedef map<CARD16BIT, IMState*> IMProtocol::IMStateMap [protected, inherited]

Definition at line 17 of file IMProtocol.hh.


Member Enumeration Documentation

Enumerator:
SYNC 
ASYNC 

Definition at line 50 of file IMProtocol.hh.

                           {
           SYNC,
           ASYNC
    };
Enumerator:
INVALID_CONTEXT_ID 

Definition at line 40 of file IMProtocol.hh.

                            {
           INVALID_CONTEXT_ID = 0xFFFF
    };
enum IIIMProtocol::IC_ATTRIBID [private]
Enumerator:
IC_INPUT_LANGUAGE 
IC_CHARACTER_SUBSETS 
IC_INPUT_METHOD 

Definition at line 142 of file IIIMProtocol.hh.

Enumerator:
XimType_CARD8 
XimType_CARD16 
XimType_CARD32 
XimType_STRING8 
XimType_XIMStyles 
XimType_UTF16_STRING 
XimType_LISTOF_UTF16_STRING 

Definition at line 79 of file IIIMProtocol.hh.

enum IIIMProtocol::IM_ATTRIBID [private]
Enumerator:
INPUTMETHOD_LIST 
OBJECT_DESCRIPTER_LIST 
CLIENT_DESCRIPTER 
CCDEF 
GUI_OBJECT 
LWE_OBJECT 

Definition at line 133 of file IIIMProtocol.hh.

                   {
    INPUTMETHOD_LIST = 0x1001,
    OBJECT_DESCRIPTER_LIST = 0x1010,
    CLIENT_DESCRIPTER = 0x1011,
    CCDEF = 0x1030,
    GUI_OBJECT = 0x1031,
    LWE_OBJECT = 0x1032
  };
enum IMProtocol::IM_Attribute [inherited]
Enumerator:
ServerName 
TransportAddress 
VendorName 
PrimaryInputLocale 
LanguageList 
ConversionOnKeys 
ConversionOffKeys 
ProtocolHandler 
ObjectDescriptors 
IMEDescriptors 
DisplayConnection 
IFName 
AppName 
DisableStatusArea 
DefaultFontName 

Definition at line 56 of file IMProtocol.hh.

                    {
    ServerName = 1,         // "iiimd"
    TransportAddress = 2,   // "tcp/<hostname>:9010" for iiim,
                            // not used for ximp40
    VendorName = 3,         // "SunMicroSystems", optional
    PrimaryInputLocale = 4,
    LanguageList = 5,
    ConversionOnKeys = 6,
    ConversionOffKeys = 7,
    ProtocolHandler = 8,
    ObjectDescriptors = 9,
    IMEDescriptors = 10,
    DisplayConnection = 11,
    IFName = 12,
    AppName = 13,
    DisableStatusArea = 14,
    DefaultFontName = 15
  };
enum IMProtocol::MODE [protected, inherited]
Enumerator:
OPEN 
SET 
GET 

Definition at line 122 of file IMProtocol.hh.

            {
    OPEN, SET, GET
  };

Constructor & Destructor Documentation

Definition at line 89 of file IIIMProtocol.cpp.

  : IMProtocol(pima)
{
    pimsl = NULL;
}

Definition at line 96 of file IIIMProtocol.cpp.

{
    if (pimsl) delete pimsl;
}
IIIMProtocol::IIIMProtocol ( IMArg args,
int  args_count 
)

Definition at line 117 of file IIIMProtocol.cpp.

                                          : IMProtocol(args, args_count) {
  protocol_name = "IIIMP";

  // ICATTRIBUTE names
  ICLocaleName = "localeName";
  ICCharSubsetsName = "characterSubsets";
  ICEngineName = "engineName";

  // IMATTRIBUTE names
  IMListName = "inputMethodList";
  IMClientName = "clientDescriptor";
  IMObjectListName = "objectDescriptorList";
  IMCCDEFName = "ccdef";
  IMGUIObjectName = "guiObject";
  IMLWEObjectName = "lweObject";

  int n = 0;
  Default_IM[n].name = (char*)IMListName;
  Default_IM[n].type = XimType_UTF16_STRING;
  Default_IM[n].id = INPUTMETHOD_LIST;
  n++;
  Default_IM[n].name = (char*)IMClientName;
  Default_IM[n].type = XimType_LISTOF_UTF16_STRING;
  Default_IM[n].id = CLIENT_DESCRIPTER;
  n++;
  Default_IM[n].name = (char*)IMObjectListName;
  Default_IM[n].type = XimType_UTF16_STRING;
  Default_IM[n].id = OBJECT_DESCRIPTER_LIST;
  n++;
  Default_IM[n].name = (char*)IMCCDEFName;
  Default_IM[n].type = XimType_UTF16_STRING;
  Default_IM[n].id = CCDEF;
  n++;
  Default_IM[n].name = (char*)IMGUIObjectName;
  Default_IM[n].type = XimType_UTF16_STRING;
  Default_IM[n].id = GUI_OBJECT;
  n++;
  Default_IM[n].name = (char*)IMLWEObjectName;
  Default_IM[n].type = XimType_UTF16_STRING;
  Default_IM[n].id = LWE_OBJECT;
  n++;
  Default_IM[n].name = 0;
  Default_IM[n].type = 0;
  Default_IM[n].id = 0;

  n = 0;
  Default_IC[n].name = (char*)ICLocaleName;
  Default_IC[n].type = XimType_UTF16_STRING;
  Default_IC[n].id = IC_INPUT_LANGUAGE;
  n++;
  Default_IC[n].name = (char*)ICEngineName;
  Default_IC[n].type = XimType_UTF16_STRING;
  Default_IC[n].id = IC_INPUT_METHOD;
  n++;
  Default_IC[n].name = (char*)ICCharSubsetsName;
  Default_IC[n].type = XimType_UTF16_STRING;
  Default_IC[n].id = IC_CHARACTER_SUBSETS;
  n++;
  Default_IC[n].name = 0;
  Default_IC[n].type = 0;
  Default_IC[n].id = 0;

  unsigned short endian = 1;
  if (*(char *)&endian) {
    im_byteOrder = 'l';
  } else {
    im_byteOrder = 'B';
  }
  /* install IM Attr and IC Attr list  */
  init_attrList();
}

Here is the call graph for this function:


Member Function Documentation

IMState * IIIMProtocol::accept ( int  flags = SYNC) [virtual]

Implements IMProtocol.

Definition at line 47 of file IIIMProtocol.cpp.

{
    IIIMPTrans *pimt;
    IIIMP_IMState *pims;

    if (!pimsl) {
       LOG_CRITICAL("I don't have any listening manner.  Immediately exit.");
       exit(255);
    }

    IMSocketTrans *pimst = pimsl->accept();
    if (!pimst) return NULL;
    pimt = new IIIMPTrans(pimst);
    if (!pimt) {
       delete pimst;
       return NULL;
    }
    if (!pimaccept->request_accept(pimt->get_fd())) {
       delete pimt;
       return NULL;
    }
    
    pims = new IIIMP_IMState(this, pimt,
                          iiimp_data_s_get_protocol_version(pimt->get_data_s()));
    // memory error.
    if (!pims) return NULL;
    add_imstate(pims);

    return pims;
}

Here is the call graph for this function:

void * IIIMProtocol::accept_loop ( void *  client_data) [static, private]

Definition at line 228 of file IIIMProtocol.cpp.

                                           {
  IIIMProtocol *iiimp_protocol = (IIIMProtocol*)client_data;
  IMTransListen *trans_listen = iiimp_protocol->trans_listen;
  while (1) {
    try {
      IMTransAccept *ss = iiimp_protocol->getIMTransAccept(trans_listen);
      if (ss) {
       IIIMPClient *client = new IIIMPClient(iiimp_protocol, ss);
       iiimp_protocol->iiimp_client_list.addItem(client);
      }
    } catch(const char* p) {
      // cerr << p << endl;
      return 0;
    }
  }
  // unreachable
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void IMProtocol::add_imstate ( IMState pims) [protected, inherited]

Definition at line 8 of file IMProtocol.cpp.

{
    immap[pims->get_im_id()] = pims;
}

Here is the call graph for this function:

Here is the caller graph for this function:

char IIIMProtocol::byteOrder ( ) [inline]

Definition at line 94 of file IIIMProtocol.hh.

{return im_byteOrder;};

Here is the caller graph for this function:

int IIIMProtocol::count_icattr ( ) [inline]

Definition at line 98 of file IIIMProtocol.hh.

{return ic_attr_num;};

Here is the caller graph for this function:

int IIIMProtocol::count_imattr ( ) [inline]

Definition at line 96 of file IIIMProtocol.hh.

{return im_attr_num;};

Here is the caller graph for this function:

int IMProtocol::countIME ( ) const [inherited]

Definition at line 97 of file IMProtocol.cpp.

                           {
  return ime_list.count();
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IMProtocol::countLanguages ( ) const [inherited]

Definition at line 67 of file IMProtocol.cpp.

                                 {
  return lang_list.count();
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IMProtocol::countObjectDescriptors ( ) const [inherited]

Definition at line 77 of file IMProtocol.cpp.

                                         {
  return od_list.count();
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IMProtocol::countOffKeys ( ) const [inherited]

Definition at line 52 of file IMProtocol.cpp.

                               {
  return off_keys.count();
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IMProtocol::countOnKeys ( ) const [inherited]

Definition at line 47 of file IMProtocol.cpp.

                              {
  return on_keys.count();
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool IMProtocol::dispatch ( CARD16BIT  im_id,
CARD16BIT  ic_id,
void *  message 
) [inherited]

Definition at line 25 of file IMProtocol.cpp.

{
    if (ic_id == INVALID_CONTEXT_ID) {
       IMState *pims = get_imstate(im_id);
       return pims->deliver(message);
    }
    ICState *pics = get_icstate(im_id, ic_id);

    if (!pics) {
       LOG_ERROR("Invalid im_id and ic_id (%d, %d)",
                (int) im_id, (int) ic_id);
       return false;
    }

    return pics->deliver(message);
}

Here is the call graph for this function:

Definition at line 99 of file IIIMProtocol.hh.

{return ic_attr;};

Here is the caller graph for this function:

ICState* IMProtocol::get_icstate ( CARD16BIT  im_id,
CARD16BIT  ic_id 
) [inline, protected, inherited]

Definition at line 31 of file IMProtocol.hh.

    {
       IMState *pims;
       pims = get_imstate(im_id);
       if (!pims) return NULL;
       return pims->get_icstate(ic_id);
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 97 of file IIIMProtocol.hh.

{return im_attr;};

Here is the caller graph for this function:

IMState* IMProtocol::get_imstate ( CARD16BIT  im_id) [inline, protected, inherited]

Definition at line 24 of file IMProtocol.hh.

    {
       IMStateMap::iterator it;
       it = immap.find(im_id);
       if (it == immap.end()) return NULL;
       return it->second;
    }

Here is the caller graph for this function:

int IIIMProtocol::get_values ( IMArg ,
int   
)

Reimplemented from IMProtocol.

Definition at line 107 of file IMProtocol.cpp.

                        {
  return ime_list.getFirstIME();
}

Here is the call graph for this function:

Definition at line 87 of file IMProtocol.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

int IIIMProtocol::getICAttrIDFromName ( const char *  name)

Definition at line 83 of file IIIMProtocol.cpp.

                                                  {
  IMAttr *args;
  int i;

  args = ic_attr;
  CompoundString cname(name);
  for (i = 0; i < ic_attr_num; i++) {
    if (cname == CompoundString(args[i].name))
      return args[i].attribute_id;
  }
  return (-1); /* not found */
}
IMEditorStruct & IMProtocol::getIME ( unsigned int  index) const [inherited]

Definition at line 102 of file IMProtocol.cpp.

                                           {
  return ime_list.getIME(index);
}

Here is the call graph for this function:

Here is the caller graph for this function:

IMTransAccept * IMProtocol::getIMTransAccept ( IMTransListen trans_listen) const [inherited]

Definition at line 201 of file IMProtocol.cpp.

{
  return proto_handler->getIMTransAccept(trans_listen);
}

Here is the call graph for this function:

Here is the caller graph for this function:

CompoundString & IMProtocol::getLang ( unsigned int  index) const [inherited]

Definition at line 72 of file IMProtocol.cpp.

                                            {
  return lang_list.getLang(index);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 112 of file IMProtocol.cpp.

                       {
  return ime_list.getNextIME();
}

Here is the call graph for this function:

Definition at line 92 of file IMProtocol.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

IMObjectDescriptorStruct & IMProtocol::getObjectDescriptor ( unsigned int  index) const [inherited]

Definition at line 82 of file IMProtocol.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

IMTriggerKey & IMProtocol::getOffKey ( unsigned int  index) const [inherited]

Definition at line 62 of file IMProtocol.cpp.

                                              {
  return off_keys.getKey(index);
}

Here is the call graph for this function:

Here is the caller graph for this function:

IMTriggerKey & IMProtocol::getOnKey ( unsigned int  index) const [inherited]

Definition at line 57 of file IMProtocol.cpp.

                                             {
  return on_keys.getKey(index);
}

Here is the call graph for this function:

Here is the caller graph for this function:

const CompoundString & IMProtocol::getPrimaryLocale ( ) const [inherited]

Definition at line 117 of file IMProtocol.cpp.

                                   {
  return input_locale;
}

Here is the caller graph for this function:

void IIIMProtocol::init_attrList ( ) [private]

Definition at line 97 of file IIIMProtocol.cpp.

                            {
  IMAttr *args;
  int total_count;

  /* init IMAttr list */
  args = CreateAttrList(Default_IM, &total_count);

  im_attr_num = total_count;
  im_attr = (IMAttr *)args;

  /* init IMAttr list */
  args = CreateAttrList(Default_IC, &total_count);

  ic_attr_num = total_count;
  ic_attr = (IMAttr*)args;

  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool IIIMProtocol::receive_and_dispatch ( IMState pims,
int  flags = SYNC 
) [virtual]

Implements IMProtocol.

Definition at line 22 of file IIIMProtocol.cpp.

{
    IIIMP_IMState *pimst = (IIIMP_IMState*) pims; // we should use dynamic_cast.
    IIIMP_message *pmes;

    pmes = pimst->get_iiimptrans()->receive();
    if (pmes) {
       pimst->dispatch(pmes->im_id, pmes->ic_id, pmes);
       iiimp_message_delete(pimst->get_iiimptrans()->get_data_s(), pmes);
       return true;
    }
    if (!pimst->get_iiimptrans()->open_p()) {
       LOG_ERROR("Client shut down the connection owned by im_id(%d).",
                pims->get_im_id());
       pims->destroy();
       return false;
    }

    return true;  // direct IMScheduler to maintain this IMState.
}

Here is the call graph for this function:

void IMProtocol::remove_imstate ( IMState pims) [protected, inherited]

Definition at line 16 of file IMProtocol.cpp.

{
    immap.erase(pims->get_im_id());
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool IIIMProtocol::restart ( IMSocketAddressVec addrvec) [private]

Definition at line 9 of file IIIMProtocol.cpp.

{
    if (pimsl) delete pimsl;

    pimsl = new IMSocketListen();
    if (!pimsl) return false;

    return pimsl->listen(addrvec);
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IIIMProtocol::run ( ) [virtual]

Implements IMProtocol.

Definition at line 196 of file IIIMProtocol.cpp.

                  {
  try {
     trans_listen = new IMTransListen(im_address, protocol_name, 1);
  } catch (char *err_msg) {
    fprintf(stderr, "Error : %s\n", err_msg);
    return -1;
  }    
#ifdef linux
  // 4354367: Linix Htt: htt_xbe can not start on standalone system
  try {
     trans_listen_local = new IMTransListen(im_address, protocol_name, 0);
  } catch (char *err_msg) {
    fprintf(stderr, "Error : %s\n", err_msg);
  }
#endif
  // open a new thread to accept connection request from IIIMP clients
  new IMThread(accept_loop, this);

#ifdef linux
  // 4354367: Linix Htt: htt_xbe can not start on standalone system
  new IMThread(accept_loop_local, this);
#endif

  return 0;
}

Here is the call graph for this function:

Definition at line 81 of file IIIMProtocol.cpp.

{
    return restart(addrvec);
}

Here is the call graph for this function:

Here is the caller graph for this function:

int IIIMProtocol::set_values ( IMArg args,
int  n 
) [virtual]

Reimplemented from IMProtocol.

Definition at line 223 of file IIIMProtocol.cpp.

                                           {
  return IMProtocol::set_values(args, n);
}

Friends And Related Function Documentation

friend class IMState [friend, inherited]

Definition at line 60 of file IMProtocol.hh.


Member Data Documentation

Definition at line 131 of file IIIMProtocol.hh.

Definition at line 130 of file IIIMProtocol.hh.

Definition at line 120 of file IIIMProtocol.hh.

Definition at line 119 of file IIIMProtocol.hh.

Definition at line 68 of file IIIMProtocol.hh.

Definition at line 69 of file IIIMProtocol.hh.

Definition at line 67 of file IIIMProtocol.hh.

Definition at line 103 of file IIIMProtocol.hh.

CompoundString IMProtocol::im_address [protected, inherited]

Definition at line 111 of file IMProtocol.hh.

Definition at line 118 of file IIIMProtocol.hh.

Definition at line 117 of file IIIMProtocol.hh.

Definition at line 108 of file IIIMProtocol.hh.

CompoundString IMProtocol::im_name [protected, inherited]

Definition at line 110 of file IMProtocol.hh.

Definition at line 75 of file IIIMProtocol.hh.

Definition at line 73 of file IIIMProtocol.hh.

Definition at line 120 of file IMProtocol.hh.

Definition at line 76 of file IIIMProtocol.hh.

Definition at line 72 of file IIIMProtocol.hh.

Definition at line 77 of file IIIMProtocol.hh.

IMStateMap IMProtocol::immap [protected, inherited]

Definition at line 18 of file IMProtocol.hh.

Definition at line 74 of file IIIMProtocol.hh.

CompoundString IMProtocol::input_locale [protected, inherited]

Definition at line 112 of file IMProtocol.hh.

IMLanguageList IMProtocol::lang_list [protected, inherited]

Definition at line 114 of file IMProtocol.hh.

Definition at line 118 of file IMProtocol.hh.

IMTriggerKeyList IMProtocol::off_keys [protected, inherited]

Definition at line 116 of file IMProtocol.hh.

IMTriggerKeyList IMProtocol::on_keys [protected, inherited]

Definition at line 115 of file IMProtocol.hh.

IMAccept* IMProtocol::pimaccept [protected, inherited]

Definition at line 15 of file IMProtocol.hh.

Definition at line 13 of file IIIMProtocol.hh.

Definition at line 103 of file IMProtocol.hh.

CompoundString IMProtocol::protocol_name [protected, inherited]

Definition at line 109 of file IMProtocol.hh.

Definition at line 110 of file IIIMProtocol.hh.

CompoundString IMProtocol::vendor_name [protected, inherited]

Definition at line 113 of file IMProtocol.hh.


The documentation for this class was generated from the following files: