eap_status_e asn1_der_type_c::debug_object_identifier(eap_variable_data_c * const debug_buffer) { if (debug_buffer == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); } eap_status_e status(eap_status_process_general_error); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - status = debug_buffer->set_data_length(debug_buffer->get_buffer_length()); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } const u32_t recursion(m_recursion + 1u); const u32_t max_prefix_length(recursion * SIZE_OF_ONE_OCTET_STRING + 1ul); if (debug_buffer->get_buffer_length() < (max_prefix_length + 2ul)) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } const u32_t max_data_output_length((debug_buffer->get_buffer_length() - (max_prefix_length + 2ul))/2ul); const u32_t max_plain_output_length(max_data_output_length); u32_t prefix_length(0ul); u8_t * const prefix = debug_buffer->get_data(); if (prefix == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); } status = debug_create_prefix(recursion, prefix, max_prefix_length, &prefix_length); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } u8_t * const data_output = debug_buffer->get_data_offset(max_prefix_length, max_data_output_length); if (data_output == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } data_output[max_data_output_length-1ul] = 0; u8_t * const plain_output = debug_buffer->get_data_offset(max_prefix_length + max_data_output_length, max_plain_output_length); if (plain_output == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } plain_output[max_plain_output_length - 1ul] = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const u32_t length = get_content_length(); if (length == 0) { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("# ERROR: invalid %s, length=%d\n"), get_tag_string(), length)); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_buffer_too_short); } const u8_t * const oid_data = get_content(); if (oid_data == 0) { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("# ERROR: invalid %s, length=%d\n"), get_tag_string(), length)); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_buffer_too_short); } u32_t offset(0ul); u8_t oid_octet = oid_data[offset]; u32_t oid1 = oid_octet / 40; u32_t oid2 = (oid_octet - oid1*40); EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("%s%02x # = %d = 40 * %d + %d => %d.%d\n"), prefix, oid_octet, oid_octet, oid1, oid2, oid1, oid2)); ++offset; while(offset < length) { u32_t oid_length(0ul); u32_t data_output_offset(0ul); u32_t plain_output_offset(0ul); u32_t ind(0ul); for (ind = offset; ind < length; ++ind) { u8_t oid_octet = oid_data[ind]; ++oid_length; if ((oid_octet & OID_HIGH_BIT) == 0) { break; } } // for() u32_t power = oid_length - 1ul; u32_t oid_value(0ul); for (ind = offset; ind < (offset+oid_length); ++ind) { u8_t oid_octet = oid_data[ind]; data_output_offset += m_am_tools->snprintf( &data_output[data_output_offset], max_data_output_length - data_output_offset, "%02x \0", oid_octet); u8_t oid = static_cast<u8_t>(oid_octet & (~OID_HIGH_BIT)); if (ind > offset) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, " + \0"); } if (power > 1ul) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x * 128 ^ %d\0", oid, power); } else if (power > 0ul) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x * 128\0", oid); } else { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x\0", oid); } oid_value = (oid_value << 7) + oid; --power; } // for() EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("%s%s # %s = %d\n"), prefix, data_output, plain_output, oid_value)); offset += oid_length; } EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); }
int ask_tag (char *fn) { ID3_tag fntag; char track[20],genre[20],*t,*w,*p,*f,*pfntmp,*ptagtmp; char tagtmp[256],fntmp[256]; int length; /* If tag from file name, we grab the fields */ memset(&fntag,0,sizeof(ID3_tag)); if (flags.tag_ffn == TRUE) { strcpy(tagtmp,tag_template);p=ptagtmp=tagtmp; strcpy(fntmp,fn);pfntmp=fntmp; w=NULL; while(p!=NULL) { p=strchr(ptagtmp,IDENT_CHAR); /* if it's the last char */ if(p!=NULL) { *p=0; if(*(p+1)==0)break; } f=strstr(pfntmp,ptagtmp); if(f==NULL)break; if(w!=NULL) { switch(*w) { case 'a' : /* artist */ length=MIN(f-pfntmp,sizeof(fntag.artist)); strncpy(fntag.artist,pfntmp,length); break; case 'c' : /* comment */ if(fntag.version==0) {length=MIN(f-pfntmp,sizeof(fntag.u.v10.comment)); strncpy(fntag.u.v10.comment,pfntmp,length); } else {length=MIN(f-pfntmp,sizeof(fntag.u.v11.comment)); strncpy(fntag.u.v11.comment,pfntmp,length); } break; case 's' : /* song */ length=MIN(f-pfntmp,sizeof(fntag.songname)); strncpy(fntag.songname,pfntmp,length); break; case 't' : /* title */ length=MIN(f-pfntmp,sizeof(fntag.album)); strncpy(fntag.album,pfntmp,length); break; case 'y' : /* year */ length=MIN(f-pfntmp,sizeof(fntag.year)); strncpy(fntag.year,pfntmp,length); break; case 'd' : /* dummy */ break; case 'g' : /* Genre */ memset(genre,0,sizeof(genre)); length=MIN(f-pfntmp,sizeof(genre)-1); strncpy(genre,pfntmp,length); search_genre (2, &fntag.genre, genre); break; case 'n' : /* Track */ memset(track,0,sizeof(track)); length=MIN(f-pfntmp,sizeof(track)-1); strncpy(track,pfntmp,length); fntag.version=1; fntag.u.v11.track=0; t=track; while(*t!=0) {fntag.u.v11.track*=10; fntag.u.v11.track+=*t-'0'; t++; } break; } w=NULL; } f+=strlen(ptagtmp); if(p!=NULL) { w=p+1; p+=2; ptagtmp=p; pfntmp=f; } } } if (strcmp(fntag.songname,"")==0) get_tag_string(sizeof(ptrtag->songname), def_song, ptrtag->songname, "Song Name"); else get_tag_string(sizeof(ptrtag->songname), fntag.songname, ptrtag->songname, "Song Name"); if (strcmp(fntag.artist,"")==0) get_tag_string(sizeof(ptrtag->artist), def_artist, ptrtag->artist, "Artist Name"); else get_tag_string(sizeof(ptrtag->artist), fntag.artist, ptrtag->artist, "Artist Name"); if (flags.no_album == FALSE) { if (strcmp(fntag.album,"")==0) get_tag_string(sizeof(ptrtag->album), def_album, ptrtag->album, "Album Name"); else get_tag_string(sizeof(ptrtag->album), fntag.album, ptrtag->album, "Album Name"); } if (flags.no_year == FALSE) { if (strcmp(fntag.year,"")==0) get_tag_string(sizeof(ptrtag->year), def_year, ptrtag->year, "Year"); else get_tag_string(sizeof(ptrtag->year), fntag.year, ptrtag->year, "Year"); } if (flags.no_track == FALSE) { if (fntag.version==1&&fntag.u.v11.track!=0) get_tag_track(&ptrtag->u.v11.track, fntag.u.v11.track,&ptrtag->version); else get_tag_track(&ptrtag->u.v11.track, def_track,&ptrtag->version); } if (flags.no_comment == FALSE) { if (ptrtag->version==0) { if (strcmp(fntag.u.v10.comment,"")==0) get_tag_string(sizeof(ptrtag->u.v10.comment), def_comment, ptrtag->u.v10.comment, "Comment"); else get_tag_string(sizeof(ptrtag->u.v10.comment), fntag.u.v10.comment, ptrtag->u.v10.comment, "Comment"); } else { if (strcmp(fntag.u.v11.comment,"")==0) get_tag_string(sizeof(ptrtag->u.v11.comment), def_comment, ptrtag->u.v11.comment, "Comment"); else get_tag_string(sizeof(ptrtag->u.v11.comment), fntag.u.v11.comment, ptrtag->u.v11.comment, "Comment"); } } if (flags.no_genre == FALSE) { if (fntag.genre==0) get_tag_genre(&ptrtag->genre, def_genre); else get_tag_genre(&ptrtag->genre, fntag.genre); } if (strlen(ptrtag->songname) < 1 ) /*|| strlen(ptrtag->artist) < 1)*/ /* || ptrtag->genre < 0 || ptrtag->genre >= genre_count) */ { user_message(FALSE, "Not enough info entered to tag %s\n", fn); return FALSE; } return TRUE; }
eap_status_e asn1_der_type_c::debug_header(eap_variable_data_c * const debug_buffer) { if (debug_buffer == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); } const u32_t max_data_length(m_recursion * SIZE_OF_ONE_OCTET_STRING + m_offset_of_contents_field * SIZE_OF_ONE_OCTET_STRING); if (max_data_length > debug_buffer->get_buffer_length()) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } eap_status_e status = debug_buffer->set_data_length(max_data_length); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } u32_t ind(0ul); u32_t offset(0ul); u8_t * const prefix = reinterpret_cast<u8_t *>(debug_buffer->get_data(max_data_length)); if (prefix == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } status = debug_create_prefix(m_recursion, prefix, max_data_length, &offset); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } for (ind = 0ul; ind < m_offset_of_length_field && ind < m_input_data_length; ++ind) { offset += m_am_tools->snprintf( debug_buffer->get_data_offset(offset, debug_buffer->get_data_length() - offset), debug_buffer->get_data_length() - offset, "%02x \0", m_input_data[ind]); } for (ind = m_offset_of_length_field; ind < m_offset_of_contents_field && ind < m_input_data_length; ++ind) { offset += m_am_tools->snprintf( debug_buffer->get_data_offset(offset, debug_buffer->get_data_length() - offset), debug_buffer->get_data_length() - offset, "%02x \0", m_input_data[ind]); } status = debug_buffer->add_end_null(); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } eap_const_string tag_string = 0; eap_char buffer[MAX_STACK_BUFFER]; if (get_class() == asn1_class_application) { m_am_tools->snprintf( reinterpret_cast<u8_t *>(buffer), MAX_STACK_BUFFER, "Application[%d]\0", get_tag()); tag_string = buffer; } else if (get_class() == asn1_class_context_specific) { m_am_tools->snprintf( reinterpret_cast<u8_t *>(buffer), MAX_STACK_BUFFER, "[%d]\0", get_tag()); tag_string = buffer; } else { tag_string = get_tag_string(); } EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("%s # %s, %s, %s, length=0x%x=%d, this=0x%08x, index=%d\n"), debug_buffer->get_data(max_data_length), get_class_string(), get_pc_string(), tag_string, get_content_length(), get_content_length(), this, m_index)); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); }