Make your own free website on Tripod.com

Inicio | Diagrama | Herramientas

Clase RadiusAttr

Estado actual: En Proceso de Ingenieria Reversa al 25-08-2006

Diagrama de la clase. (ver codigo fuente)

Haga Click para abrir codigo correspondiente Haga Click para abrir codigo correspondiente Haga Click para abrir codigo correspondiente Haga Click para abrir codigo correspondiente Haga Click para abrir codigo correspondiente

Especificación de la Clase :  
  En construccion.  

Nombre de la Clase : RadiusAttr

Especificación de la clase: Clase que encapsula la estructura del atributo ‘RADIUS’.

Clase Base: ninguna

Clase Derivada: ninguna(aun)

Clase Amiga: RadiusPDU;

 

Atributos

1.1. Publicas

·         Constants {}; dato de tipo ‘enum, contiene constantes útiles las cuales son:

Máxima longitud del atributo de datos en bruto: “MaxLength = 255 ,

longitud del atributo ‘fixed header’ (Tipo+Longitud): “FixedHeaderLength = 2 , máxima longitud del campo ‘Value’: “MaxValueLength = (MaxLength - FixedHeaderLength)”, longitud del ‘fixed header’ para el VSA (estandar header + campo VendorId):

VsaFixedHeaderLength = FixedHeaderLength + 4 , máxima longitud campo ‘Value’ del VSA: “VsaMaxValueLength = (MaxLength - VsaFixedHeaderLength)”, longitud del ‘fixed header’ para el RFC2865 que conforma el VSA (standard header + VendorId, VendorType and VendorLength fields): “VsaRfc2865FixedHeaderLength  =  VsaFixedHeaderLength + 2” , máxima longitud del VSA RFC2865 que conforman el capo ‘Value’: “VsaMaxRfc2865ValueLength = (MaxLength - VsaRfc2865FixedHeaderLength)”.

 

·         AttrTypes {}; dato de tipoenum, Constante para el campo tipo de Atributo ‘RADIUS’ los cuales son: Invalid = 0, UserName, UserPassword, ChapPassword, NasIpAddress = 4, NasPort, ServiceType, FramedProtocol, FramedIpAddress = 8, FramedIpNetmask, FramedRouting, FilterId, FramedMtu = 12, FramedCompression, LoginIpHost, LoginService, LoginTcpPort = 16, OldPassword, ReplyMessage, CallbackNumber, CallbackId = 20, Expiration, FramedRoute, FramedIpxNet, State = 24, AttrTypeClass, VendorSpecific, SessionTimeout, IdleTimeout = 28, TerminationAction, CalledStationId, CallingStationId,

NasIdentifier = 32, ProxyState, LoginLatService, LoginLatNode,

LoginLatGroup = 36, FramedAppleTalkLink, FramedAppleTalkNetwork, FramedAppleTalkZone,

AcctStatusType = 40, AcctDelayTime, AcctInputOctets, AcctOutputOctets, AcctSessionId = 44, AcctAuthentic, AcctSessionTime, AcctInputPackets, AcctOutputPackets = 48, AcctTerminateCause, AcctMultiSessionId, AcctLinkCount,

AcctInputGigawords = 52, AcctOutputGigawords, EventTimestamp = 55, ChapChallenge = 60, NasPortType, PortLimit, LoginLatPort,

TunnelType = 64, TunnelMediumType, TunnelClientEndpoint, TunnelServerEndpoint, AcctTunnelConnectionId = 68, TunnelPassword, PasswordRetry = 75, Prompt = 76, ConnectInfo, ConfigurationToken,     AcctInterimInterval = 85, AcctTunnelPacketsLost, NasPortId.

 

·         ServiceTypes {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘Service-Type’ (tipo de servicio) los cuales son:

                               ST_Login = 1, ST_Framed, ST_CallbackLogin,

                               ST_CallbackFramed = 4, ST_Outbound, ST_Administrative,

                               ST_NasPrompt = 7,

                               ST_AuthenticateOnly = 8, ST_CallbackNasPrompt, ST_CallCheck,

                               ST_CallbackAdministrative = 9

               

·         FramedProtocols {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘Framed-Protocol’ los cuales son: FP_Ppp = 1, FP_Slip.

 

·         FramedCompressionTypes {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘Framed-Compression’ los cuales son: FC_None = 0, FC_VJTcpIp, FC_Ipx, FC_StacLZS  .

 

·         LoginServiceTypes {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘Login-Service’, los cuales son: LS_Telnet = 0, LS_Rlogin, LS_TcpClear, LS_PortMaster, LS_Lat, LS_X25_PAD, LS_X25_T3POS, LS_TcpClearQuiet.

 

·         NASPortTypes {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘NAS-Port-Type’, los cuales son: NasPort_Asynchronous = 0, NasPort_Synchronous, NasPort_IsdnSynchronous, NasPort_IsdnAsynchronousV120 = 3, NasPort_IsdnAsynchronousV110, NasPort_Virtual = 5, NasPort_Piafs, NasPort_HdlcClearChannel, NasPort_X25 = 8, NasPort_X75, NasPort_G3Fax, NasPort_SDSL, NasPort_AdslCap = 12, NasPort_AdslDmt, NasPort_Idsl, NasPort_Ehternet, NasPort_xDsl = 16, NasPort_Cable, NasPort_WirelessOther, NasPort_WirelessIeee8021 = 19.

 

·         AcctStatusTypes {}; dato de tipo ‘enum, Constantes de valores para el atributo ‘Acct-Status-Type’ los cuales son: AcctStatus_Start = 1,  AcctStatus_Stop = 2, AcctStatus_InterimUpdate = 3, AcctStatus_AccountingOn = 7,  AcctStatus_AccountingOff = 8.

 

·         VendorIdentifiers {}; dato de tipo ‘enum, Constantes para el campo ‘VendorId VSA’ los cuales son: CiscoVendorId = 9.

 

·         CiscoVSA {}; dato de tipo ‘enum, Contantes para el tipo ‘Cisco VSA’ los cuales son: CiscoVSA_AV_Pair = 1, CiscoVSA_h323_remote_address = 23, CiscoVSA_h323_conf_id = 24, CiscoVSA_h323_setup_time = 25, CiscoVSA_h323_call_origin = 26, CiscoVSA_h323_call_type = 27, CiscoVSA_h323_connect_time = 28, CiscoVSA_h323_disconnect_time = 29, CiscoVSA_h323_disconnect_cause = 30, CiscoVSA_h323_voice_quality = 31, CiscoVSA_h323_gw_id = 33, CiscoVSA_h323_incoming_conf_id = 35,

CiscoVSA_h323_credit_amount = 101, CiscoVSA_h323_credit_time = 102, CiscoVSA_h323_return_code = 103, CiscoVSA_h323_redirect_number = 106,

CiscoVSA_h323_preferred_lang = 107, CiscoVSA_h323_redirect_ip_address = 108, CiscoVSA_h323_billing_model = 109, CiscoVSA_h323_currency = 110.

 

 

1.2. Privadas: ninguna.

1.3. Protegidas

·         m_data[]; dato array del tipo ‘unsigned char perteneciente al ‘Unionanónimo de la clase, que, comparte el espacio de memoria con la estructura anónima y de tamaño ‘MaxLength’, contiene el paquete de datos.

·         m_type; dato del tipo ‘unsigned char que pertenece a la estructura anónima contenida dentro del ‘union’ anónimo de la clase, contiene el tipo.

·         m_length; dato del tipo ‘unsigned char que pertenece a la estructura anónima contenida dentro del ‘union’ anónimo de la clase, contiene la longitud.

·         m_value[]; dato array del tipo ‘unsigned char que pertenece a un ‘union’ anónimo de la estructura anónima contenida dentro del ‘union’ anónimo de la clase, comparte el espacio de memoria con una estructura anónima y es de tamaño: MaxLength - FixedHeaderLength

·         m_vendorId[]; dato array del tipo ‘unsigned char que pertenece a una estructura anónima dentro del ‘union’ anónimo de la estructura anónima contenida dentro del ‘union’ anónimo de la clase, y es de tamaño: 4.

·         m_vendorType; dato del tipo ‘unsigned char que pertenece a una estructura anónima dentro del ‘union’ anónimo de la estructura anónima contenida dentro del ‘union’ anónimo de la clase.

·         m_vendorLength; dato del tipo ‘unsigned char que pertenece a una estructura anónima dentro del ‘union’ anónimo de la estructura anónima contenida dentro del ‘union’ anónimo de la clase.

·         m_vendorValue[]; dato array del tipo ‘unsigned char que pertenece a una estructura anónima dentro del ‘union’ anónimo de la estructura anónima contenida dentro del ‘union’ anónimo de la clase, y de tamaño: MaxLength - VsaRfc2865FixedHeaderLength

 

Operaciones

2.1. Publicas

·         RadiusAttr(); constructor por defecto, construye el atributo no inicializado. Este Debe ser inicializado después por otros medios (operador =, etc.).

·         RadiusAttr(unsigned char attrType, const void* attrValue, PINDEX valueLength); constructor, Crea atributo TLV RADIUS de un tipo dado,  inicializando el campo 'value' con 'el attrLength' los bytes  de datos apuntados por el 'attrValue'. En caso de VSA, el 'vsaVendorId' se lee del dato valor del atributo.

·         RadiusAttr(const RadiusAttr& attr) { memcpy(m_data, attr.m_data, attr.m_length); } ; Constructor de copia para el atributo RADIUS. Simplemente copia bytes.

·         RadiusAttr(unsigned char attrType, const PString& stringValue);  constructor, Créa el atributo TLV RADIUS de un tipo dado, Inicializando el campo ‘value’ con 'stringValue.GetLength()' bytes Desde el string 'stringValue'. En caso de VSA, ‘vsaVendorId’ es extraído desde la data contenida en el campo ‘value’.

·         RadiusAttr(unsigned char attrType, int intValue); constructor, Crea el atributo TLV RADIUS de un tipo dado, Inicializando el campo ‘value’ con un valor entero pasado con el parámetro  'intValue'. Este constructor también debe ser usado por atributos que transportan 32-bit timestamps.

·         RadiusAttr(unsigned char attrType, const PIPSocket::Address& addressValue); constructor, Crear el atributo TLV RADIUS de un tipo dado, inicializando el campo ‘value’ con una direccion IPv4 de 32 bit pasado con el parametroaddressValue’.

·         RadiusAttr(const void* attrValue, PINDEX valueLength, int vendorId, unsigned char vendorType); constructor, Crea el atributo TLV RADIUS ‘vendor-specific’ (26) de un tipo ‘vendor specific’ dado, inicializando ‘value’ con el identificador de 32 bit 'vendorId', 'vendorType' tipo de atributo ‘vendor’ y 'attrLength' bytes de puntero a 'attrValue'. ‘vsaVendorId’ es colocado en 'vendorId'.

·         RadiusAttr(const PString& stringValue, int vendorId, unsigned char vendorType); constructor, Crea un atributo TLV RADIUS ‘vendor-specific’ de un tipo dado, inicializando el dato ‘value’ con el identificador de 32 bit 'vendorId', el tipo de atributo 'vendorType' y stringValue.GetLength()' bytes (caracteres) del parámetro 'stringValue'. ‘vsaVendorId’ es establecido a 'vendorId'.

·         RadiusAttr(int intValue, int vendorId, unsigned char vendorType); constructor, Crea el atributo TLV RADIUS ‘vendor-specific’ de un tipo dado, inicializando el dato ‘value’ con el identificador de 32 bits 'vendorId', Tipo de atributo vendor-specific 'vendorType' y el valor entero de 32 bit 'intValue'. ‘vsaVendorId’ es establecido en 'vendorId'.

·         RadiusAttr(const PIPSocket::Address& addressValue, int vendorId, unsigned char vendorType ); constructor, Crea el atributo TLV RADIUS ‘vendor-specific’ de un tipo dado, inicializando el dato ‘value’ con el identificador de 32 bit 'vendorId', el tipo de atributo 'vendorType' y la direccion Ipv4 de 32 bit especificada por el parámetro 'addressValue'. ‘vsaVendorId’ es establecido a 'vendorId'.

·         RadiusAttr(unsigned char type, bool vsaHack, const PString& stringValue ); constructor, Crea TLV RADIUS Cisco VSA atributo de un tipo dado. Si ‘vsaHack’ es falso, entonces el nombre del atributo es también incluido dentro del atributo ‘value’ (como 'h323-currency=USD').

·         RadiusAttr(const void* rawData, PINDEX rawLength); constructor, crea el atributo TLV Radius, leyendo data en bruto del buffer parámetro ‘rawData’ leyendo paradas después que el atributo completo ha sido reconstruido desde la data o ‘rawlengthbytes (logitud de bytes) han sido leidos. Asegurarse de llamar a IsValid()’ para revisar si el atributo ha sido reconstruido satisfactoriamente. Llamar GetLength()’ para obtener el numero de bytes que han sido actualmente leidos.

·         GetType(); función constante que retorna ‘m_type’ un valor del tipo unsigned char, retorna el tipo de este atributo.

·         GetVsaType(){ return (m_length < VsaRfc2865FixedHeaderLength) ? 0 : m_vendorType;}; función constante que retorna un valor del tipo unsigned char, retorna el tipo de ‘Vendor-specific’ para este  atributo, asumiendo que este atributo es un VSA conforme a las pautas RFC 2865 para VSAs (tiene los campos vendorId, vendorType y vendorLength).

·         GetLength(); función constante que retorna ‘m_length’, un valor del tipo PINDEX, retorna la longitud total (bytes) de este atributo.

·         GetValueLength(){ const PINDEX len = m_length;

const PINDEX headerLen = IsVsa() ? VsaFixedHeaderLength : FixedHeaderLength; return (len <= headerLen) ? 0 : (len - headerLen);}; función constante que retorna un valor del tipo PINDEX, retorna la longitud (bytes) del campo Value para este atributo.

·         GetVsaValueLength(); función constante que retorna un valor del tipo PINDEX, retorna la longitud (bytes) del campo Value para este atributo, asumiendo que es conforme a las pautas RFC 2865 para VSAs      (contiene los campos vendorId, vendorType and vendorLength).

·         GetValue(PBYTEArray& val, PINDEX offset = 0); función constante que retorna un valor del tipo bool, llena el array de byte con el valor asociado con este atributo. El array es redimensionado, si es necesario, para contener el valor. Llama GetValueLength()’ para determinar el numero de bytes escritos en el array.

·         GetVsaValue( PBYTEArray& val, PINDEX offset = 0 ); función constante que retorna un valor del tipo bool, Llena el array de byte con valores asociados a este atributo, asumiendo que es conforme con la pauta RFC 2865 del VSA. El array es redimensionado, si es necesario, para contener el valor. Llama “GetVsaValueLength()” para determinar el numero de bytes escritos en el array.

·         IsVsa(){ return (m_type == VendorSpecific); }; función constante que retorna un valor del tipo bool, retorna ‘True’ (verdadero) si este es un atributo de vendedor específico (‘vendor-specific attribute’ o VSA).

·         GetVsaVendorId(); función constante que retorna un valor del tipo int, retorna un identificador de fabricante VSA de 32 bits. Esta llamada es válida solo para atributos VSA(ver ‘IsVSA()’). También asegura que este atributo es válido (IsValid()’).

·         AsString(); función constante que retorna un valor del tipo PString, Obtiene el valor del Atributo como una cadena (string). Estar consciente que la cadena puede contener 0s incluidos. Para los atributos VSA esta llamada construirá la cadena desde la data contenida después del campo vendorId. Si el valor VSA conforme las pautas RFC 2865 tiene que ser recuperado use mas bien “AsVsaString()”. Retorna PString conteniendo el valor del atributo. Si un error ocurre, una cadena (string) vacía es retornada.

·         AsVsaString(); función constante que retorna un valor del tipo PString, Obtiene el valor VSA conforme a las pautas RFC 2865 como una cadena (string). Tener presente que la cadena puede contener 0s incluidos. Esta llamada construirá la cadena desde la data contenida después de los campos vendorId, vendorType y vendorLength. Retorna PString conteniendo el valor del atributo. Si un error ocurre, una cadena (string) vacío es retornado.

·         AsCiscoString(); función constante que retorna un valor del tipo PString, Obtiene el valor del VSA Cisco como una cadena, con el nombre del atributo removido, si este es (if it is prepended to the string. ) . Retorna PString conteniendo el valor del atributo.

·         AsInteger(); función constante que retorna un valor del tipo int, Obtiene el valor del atributo como un entero de 32 bits. Para los atributos VSA esta llamada construirá el entero de 4 bytes de datos contenidos después del campo vendorId. Si el valor VSA conforme a las pautas RFC 2865 tiene que ser recuperado, use mas bien “AsVsaInteger()”. Retorna un entero representando el valor del atributo. Si un error ocurre, es retornado un cero.

·         AsVsaInteger(); función constante que retorna un valor del tipo int, Obtiene el valor VSA conforme a las pautas RFC 2865 como un entero de 32 bit’s. Esta llamada construirá el entero de 4 bytes de datos contenidos después de los campos vendorId, vendorType y vendorLength. Retorna un entero representando el valor del atributo. Si un error ocurre, es retornado un cero.

·         AsTime() { return (time_t)AsVsaInteger(); } ;función constante que retorna un valor del tipo time_t, Obtiene el valor del atributo como un timestamp de 32 bit’s. Para atributos VSA, esta llamada construirá el timestamp desde 4 bytes de datos contenidos después del campo vendorId. Si el valor VSA conforme pautas RFC2865 tiene que ser recuperado, se usa mas bien AsVsaTimestamp()’. Retorna PTime representado el valor del atributo. Este timestamp es interpretado como el numero de segundos pasados desde . This timestamp is interpreted as number of seconds passed since

·         AsVsaTime(){ return (time_t)AsVsaInteger(); } ; función constante que retorna un valor del tipo time_t, Obtiene el valor VSA conforme a las pautas RFC2865 como un timestamp de 32 bit’s. Esta llamada construirá el timestamp desde 4 bytes de datos contenidos después de los campos vendorId, vendorType y vendorLength. Retorna PTime representado el valor del atributo. Este timestamp es interpretado como el numero de segundos pasados desde (This timestamp is interpreted as number of seconds passed since)

·         PIPSocket::Address AsAddress() const; Obtiene el valor del atributo como una direccion IPv4 de 32 bit’s. Para los atributos VSA esta llamada construirá  la dirección IPv4 desde 4 bytes de datos contenidos después del campo vendorId. Si el valor VSA conforme pautas RFC2865 tiene que ser recuperado, se usa mas bien AsVsaAddress()’. Retorna la dirección IPv4 representando el valor del atributo.

·         PIPSocket::Address AsVsaAddress() const; Obtiene el valor VSA conforme pautas RFC2865 como una direccion IPv4 de 32 bit’s. Esta llamada construirá  la dirección IPv4 desde 4 bytes de datos contenidos después de los campos vendorId, vendorType y vendorLength. Retorna la dirección IPv4 representando el valor del atributo.

·         Write( PBYTEArray& buffer, PINDEX& written, PINDEX offset = 0 ); función constante que retorna un valor del tipo bool, Escribe este atributo al buffer. El buffer es redimensionado, si es necesario, para contener este atributo. Retorna ‘True’ si es satisfactoriamente escrito (y ‘written’ recibe el número de bytes escritos al buffer).

·         RadiusAttr& operator=( const RadiusAttr& attr ) { memcpy(m_data, attr.m_data, attr.m_length); return *this; }; sobrecarga del operador de asignación ‘=’, Asigna contenidos de el atributo ‘attr’ a este atributo. Retorna referencia a este atributo.

·         IsValid()

                               {              return ((PINDEX)m_length) >= ((m_type == VendorSpecific)

                                               ? VsaFixedHeaderLength : FixedHeaderLength

                                               );

} ; función constante que retorna un valor del tipo bool, Revisa si este atributo tiene datos válidos, retorna ‘TRUE’ (verdadero) si este atributo es válido.

·         PrintOn( ostream& strm); función constante sin retorno de valores (void); Envía PDU al ‘stream’ (flujo o secuencia de salida/entrada). Este es principalmente usado por la función del operador estándar “<<”.

·         friend ostream& operator<<(ostream& s, const RadiusAttr& attr)

                               { attr.PrintOn(s); return s; }; sobrecarga del operador estándar ‘<<’

 

 

2.2. Privadas

2.3. Protegidas

·         Read( const void* rawData, PINDEX rawLength ); función que retorna un valor del tipo bool, Lee los datos del atributo del buffer de datos en bruto. retorna ‘TRUE’ si el atributo ha sido satisfactoriamente leído. Llama a “GetLength()” para determinar cuantos bytes han sido leidos.

·         Read(const PBYTEArray& array, PINDEX offset = 0)

                               {

                                               return (array.GetSize() > offset)

                                               ? Read(((const BYTE*)array) + offset, array.GetSize() - offset)

                                               : false;

} ; función que retorna un valor del tipo bool, Lee los datos del atributo del array de byte’s. Retorna ‘TRUE’ si el atributo ha sido satisfactoriamente leido. Llama a “GetLength()” para determinar cuantos bytes han sido leidos.

 

 

Tipos Definidos

3.1. Publicas: ninguno.

3.2. Privadas: ninguno.

3.3. Protegidas: ninguno.