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

📄 packet-cosnaming.c

📁 ethereal公司开发的aodv路由协议代码
💻 C
📖 第 1 页 / 共 3 页
字号:
                    default:                    /* Unknown Exception */                    g_warning("Unknown Exception ");                                        break;                        }   /* switch(header->message_type) */                break;               default:            /* Unknown GIOP Message */            g_warning("Unknown GIOP Message");                    break;                } /* switch(header->message_type) */     }/* * IDL:omg.org/CosNaming/BindingIterator/next_one:1.0 */ static void decode_CosNaming_BindingIterator_next_one(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, MessageHeader *header, gchar *operation) {    gboolean stream_is_big_endian;          /* big endianess */        /* Operation specific Variable declarations Begin */        guint8    u_octet1;        /* Operation specific Variable declarations End */            stream_is_big_endian = is_big_endian(header);        switch(header->message_type) {        case Request:            break;            case Reply:            switch(header->rep_status) {                case NO_EXCEPTION:                    u_octet1 = get_CDR_boolean(tvb,offset);            if (tree) {               proto_tree_add_text(tree,tvb,*offset-1,1,"Operation_Return_Value = %u",u_octet1);            }                        /*  Begin struct "CosNaming_Binding"  */                                                        decode_CosNaming_Binding_st(tvb, pinfo, tree, offset, header, operation);                                    /*  End struct "CosNaming_Binding"  */                        break;                    case USER_EXCEPTION:                    break;                    default:                    /* Unknown Exception */                    g_warning("Unknown Exception ");                                        break;                        }   /* switch(header->message_type) */                break;               default:            /* Unknown GIOP Message */            g_warning("Unknown GIOP Message");                    break;                } /* switch(header->message_type) */     }/* * IDL:omg.org/CosNaming/BindingIterator/next_n:1.0 */ static void decode_CosNaming_BindingIterator_next_n(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, MessageHeader *header, gchar *operation) {    gboolean stream_is_big_endian;          /* big endianess */        /* Operation specific Variable declarations Begin */        guint32   u_octet4;    guint8    u_octet1;    guint32   u_octet4_loop_bl;    guint32   i_bl;        /* Operation specific Variable declarations End */            stream_is_big_endian = is_big_endian(header);        switch(header->message_type) {        case Request:            u_octet4 = get_CDR_ulong(tvb,offset,stream_is_big_endian, boundary);        if (tree) {           proto_tree_add_text(tree,tvb,*offset-4,4,"how_many = %u",u_octet4);        }                break;            case Reply:            switch(header->rep_status) {                case NO_EXCEPTION:                    u_octet1 = get_CDR_boolean(tvb,offset);            if (tree) {               proto_tree_add_text(tree,tvb,*offset-1,1,"Operation_Return_Value = %u",u_octet1);            }                        u_octet4_loop_bl = get_CDR_ulong(tvb, offset, stream_is_big_endian, boundary);            if (tree) {               proto_tree_add_text(tree,tvb,*offset-4, 4 ,"Seq length of bl = %u",u_octet4_loop_bl);               }                        for (i_bl=0; i_bl < u_octet4_loop_bl; i_bl++) {                            /*  Begin struct "CosNaming_Binding"  */                                                                        decode_CosNaming_Binding_st(tvb, pinfo, tree, offset, header, operation);                                                /*  End struct "CosNaming_Binding"  */                            }                        break;                    case USER_EXCEPTION:                    break;                    default:                    /* Unknown Exception */                    g_warning("Unknown Exception ");                                        break;                        }   /* switch(header->message_type) */                break;               default:            /* Unknown GIOP Message */            g_warning("Unknown GIOP Message");                    break;                } /* switch(header->message_type) */     }/* * IDL:omg.org/CosNaming/BindingIterator/destroy:1.0 */ static void decode_CosNaming_BindingIterator_destroy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, MessageHeader *header, gchar *operation) {    gboolean stream_is_big_endian;          /* big endianess */        /* Operation specific Variable declarations Begin */            /* Operation specific Variable declarations End */            stream_is_big_endian = is_big_endian(header);        switch(header->message_type) {        case Request:            break;            case Reply:            switch(header->rep_status) {                case NO_EXCEPTION:                                /* Function returns void */                                    break;                    case USER_EXCEPTION:                    break;                    default:                    /* Unknown Exception */                    g_warning("Unknown Exception ");                                        break;                        }   /* switch(header->message_type) */                break;               default:            /* Unknown GIOP Message */            g_warning("Unknown GIOP Message");                    break;                } /* switch(header->message_type) */     }/* Struct = IDL:omg.org/CosNaming/NameComponent:1.0 */static void decode_CosNaming_NameComponent_st(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, MessageHeader *header, gchar *operation) {    gboolean stream_is_big_endian;          /* big endianess */        /* Operation specific Variable declarations Begin */        guint32   u_octet4;    gchar   *seq = NULL;        /* Operation specific Variable declarations End */            stream_is_big_endian = is_big_endian(header);  /* get stream endianess */            u_octet4 = get_CDR_string(tvb, &seq, offset, stream_is_big_endian, boundary);    if (tree) {       proto_tree_add_text(tree,tvb,*offset-4-u_octet4,4,"length = %u",u_octet4);       if (u_octet4 > 0)          proto_tree_add_text(tree,tvb,*offset-u_octet4,u_octet4,"NameComponent_id = %s",seq);           }        g_free(seq);          /*  free buffer  */    seq = NULL;        u_octet4 = get_CDR_string(tvb, &seq, offset, stream_is_big_endian, boundary);    if (tree) {       proto_tree_add_text(tree,tvb,*offset-4-u_octet4,4,"length = %u",u_octet4);       if (u_octet4 > 0)          proto_tree_add_text(tree,tvb,*offset-u_octet4,u_octet4,"NameComponent_kind = %s",seq);           }        g_free(seq);          /*  free buffer  */    seq = NULL;    }/* Struct = IDL:omg.org/CosNaming/Binding:1.0 */static void decode_CosNaming_Binding_st(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset, MessageHeader *header, gchar *operation) {    gboolean stream_is_big_endian;          /* big endianess */        /* Operation specific Variable declarations Begin */        guint32   u_octet4_loop_Binding_binding_name;    guint32   i_Binding_binding_name;    guint32   u_octet4;        /* Operation specific Variable declarations End */            stream_is_big_endian = is_big_endian(header);  /* get stream endianess */            u_octet4_loop_Binding_binding_name = get_CDR_ulong(tvb, offset, stream_is_big_endian, boundary);    if (tree) {       proto_tree_add_text(tree,tvb,*offset-4, 4 ,"Seq length of Binding_binding_name = %u",u_octet4_loop_Binding_binding_name);       }        for (i_Binding_binding_name=0; i_Binding_binding_name < u_octet4_loop_Binding_binding_name; i_Binding_binding_name++) {            /*  Begin struct "CosNaming_NameComponent"  */                                        decode_CosNaming_NameComponent_st(tvb, pinfo, tree, offset, header, operation);                        /*  End struct "CosNaming_NameComponent"  */            }                u_octet4 = get_CDR_enum(tvb,offset,stream_is_big_endian, boundary);    if (tree) {       proto_tree_add_text(tree,tvb,*offset-4,4,"Enum value = %u (%s)",u_octet4,val_to_str(u_octet4,CosNaming_BindingType,"Unknown Enum Value"));    }    }static gboolean dissect_cosnaming(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, int *offset, MessageHeader *header, gchar *operation, gchar *idlname) {    proto_item *ti = NULL;    proto_tree *tree = NULL;            /* init later, inside if(tree) */        gboolean be;                        /* big endianess */    guint32  offset_saved = (*offset);  /* save in case we must back out */    if (check_col(pinfo->cinfo, COL_PROTOCOL))       col_set_str(pinfo->cinfo, COL_PROTOCOL, "COSNAMING");/*  * Do not clear COL_INFO, as nothing is being written there by  * this dissector yet. So leave it as is from the GIOP dissector. * TODO: add something useful to COL_INFO  *  if (check_col(pinfo->cinfo, COL_INFO)) *     col_clear(pinfo->cinfo, COL_INFO); */    if (ptree) {       ti = proto_tree_add_item(ptree, proto_cosnaming, tvb, *offset, tvb_length(tvb) - *offset, FALSE);       tree = proto_item_add_subtree(ti, ett_cosnaming);    }      be = is_big_endian(header);         /* get endianess - TODO use passed in stream_is_big_endian instead ? */    /* If we have a USER Exception, then decode it and return */    if ((header->message_type == Reply) && (header->rep_status == USER_EXCEPTION)) {       return decode_user_exception(tvb, pinfo, tree, offset, header, operation);    }        switch(header->message_type) {        case Request:    case Reply:                if (!strcmp(operation, CosNaming_NamingContext_bind_op )) {           decode_CosNaming_NamingContext_bind(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_rebind_op )) {           decode_CosNaming_NamingContext_rebind(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_bind_context_op )) {           decode_CosNaming_NamingContext_bind_context(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_rebind_context_op )) {           decode_CosNaming_NamingContext_rebind_context(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_resolve_op )) {           decode_CosNaming_NamingContext_resolve(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_unbind_op )) {           decode_CosNaming_NamingContext_unbind(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_new_context_op )) {           decode_CosNaming_NamingContext_new_context(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_bind_new_context_op )) {           decode_CosNaming_NamingContext_bind_new_context(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_destroy_op )) {           decode_CosNaming_NamingContext_destroy(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_NamingContext_list_op )) {           decode_CosNaming_NamingContext_list(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_BindingIterator_next_one_op )) {           decode_CosNaming_BindingIterator_next_one(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_BindingIterator_next_n_op )) {           decode_CosNaming_BindingIterator_next_n(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                if (!strcmp(operation, CosNaming_BindingIterator_destroy_op )) {           decode_CosNaming_BindingIterator_destroy(tvb, pinfo, tree, offset, header, operation);           return TRUE;        }                        break;            case CancelRequest:    case LocateRequest:    case LocateReply:    case CloseConnection:    case MessageError:    case Fragment:       return FALSE;      /* not handled yet */        default:       return FALSE;      /* not handled yet */        }   /* switch */            return FALSE;}  /* End of main dissector  *//* Register the protocol with Ethereal */void proto_register_giop_cosnaming(void) {   /* setup list of header fields */#if 0   static hf_register_info hf[] = {      /* no fields yet */         };#endif   /* setup protocol subtree array */   static gint *ett[] = {      &ett_cosnaming,   };   /* Register the protocol name and description */      proto_cosnaming = proto_register_protocol("Cosnaming Dissector Using GIOP API" , "COSNAMING", "giop-cosnaming" );#if 0   proto_register_field_array(proto_cosnaming, hf, array_length(hf));#endif   proto_register_subtree_array(ett,array_length(ett));   }/* register me as handler for these interfaces */void proto_register_handoff_giop_cosnaming(void) {        #if 0        /* Register for Explicit Dissection */        register_giop_user_module(dissect_cosnaming, "COSNAMING", "CosNaming/NamingContext", proto_cosnaming );     /* explicit dissector */        #endif                #if 0        /* Register for Explicit Dissection */        register_giop_user_module(dissect_cosnaming, "COSNAMING", "CosNaming/BindingIterator", proto_cosnaming );     /* explicit dissector */        #endif                    /* Register for Heuristic Dissection */        register_giop_user(dissect_cosnaming, "COSNAMING" ,proto_cosnaming);     /* heuristic dissector */         }#ifndef __ETHEREAL_STATIC__G_MODULE_EXPORT voidplugin_reg_handoff(void){   proto_register_handoff_giop_cosnaming();}G_MODULE_EXPORT voidplugin_init(plugin_address_table_t *pat){   /* initialise the table of pointers needed in Win32 DLLs */   plugin_address_table_init(pat);   if (proto_cosnaming == -1) {     proto_register_giop_cosnaming();   }}#endif

⌨️ 快捷键说明

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