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

📄 mcpdu.h

📁 彩信MMS的全部代码
💻 H
字号:
/*
 * Copyright (C) Obigo AB, 2002-2005.
 * All rights reserved.
 *
 * This software is covered by the license agreement between
 * the end user and Obigo AB, and may be 
 * used and copied only in accordance with the terms of the 
 * said agreement.
 *
 * Obigo AB assumes no responsibility or 
 * liability for any errors or inaccuracies in this software, 
 * or any consequential, incidental or indirect damage arising
 * out of the use of the software.
 *
 */











 




#ifndef _MCPDU_H
#define _MCPDU_H


#define LENGTH_QUOTE        (unsigned char)31
#define TEXT_QUOTE          (unsigned char)127  
#define QUOTED_STRING_QUOTE (unsigned char)34   
#define SHIFT_DELIMITER     (unsigned char)127
#define SHORT_CUT_SHIFT_DELIMITER_MAX_VALUE 31







typedef enum
{
    MMS_DELIVERY_TIME_ABSOLUTE = 128,
    MMS_DELIVERY_TIME_RELATIVE = 129
} MmsDeliveryTimeType;






typedef enum
{
    MMS_EXPIRY_TIME_ABSOLUTE = 128,
    MMS_EXPIRY_TIME_RELATIVE = 129
} MmsExpiryTimeType;



typedef enum 
{
    MMS_M_SEND_REQ          = 128,
    MMS_M_SEND_CONF         = 129,
    MMS_M_NOTIFICATION_IND  = 130,
    MMS_M_NOTIFY_RESP       = 131,
    MMS_M_RETRIEVE_CONF     = 132,
    MMS_M_ACKNOWLEDGE_IND   = 133,
    MMS_M_DELIVERY_IND      = 134,
    MMS_M_READ_REC_IND      = 135,
    MMS_M_READ_ORIG_IND     = 136,
    MMS_M_FORWARD_REQ       = 137,
    MMS_M_FORWARD_CONF      = 138,
    MMS_M_MBOX_STORE_REQ    = 139,
    MMS_M_MBOX_STORE_CONF   = 140,
    MMS_M_MBOX_VIEW_REQ     = 141,
    MMS_M_MBOX_VIEW_CONF    = 142,
    MMS_M_MBOX_UPLOAD_REQ   = 143,
    MMS_M_MBOX_UPLOAD_CONF  = 144,
    MMS_M_MBOX_DELETE_REQ   = 145,
    MMS_M_MBOX_DELETE_CONF  = 146,
    MMS_M_MBOX_DESCR        = 147    
} MmsMessageType;




typedef enum
{
    MMS_MM_FLAGS_ADD            = 128,
    MMS_MM_FLAGS_REMOVE         = 129,
    MMS_MM_FLAGS_FILTER         = 130
} MmsMmFlags;




typedef enum
{
    MMS_MM_STATE_DRAFT          = 128,
    MMS_MM_STATE_SENT           = 129,
    MMS_MM_STATE_NEW            = 130,
    MMS_MM_STATE_RETRIEVED      = 131,
    MMS_MM_STATE_FORWARDED      = 132
} MmsMmState;




typedef enum
{
    MMS_STORE_STATUS_SUCCESS                            = 128,
    MMS_STORE_STATUS_ERROR_TRANSIENT_FAILURE            = 192,
    MMS_STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM    = 193,
    MMS_STORE_STATUS_ERROR_PERMANENT_FAILURE            = 224,
    MMS_STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED     = 225,
    MMS_STORE_STATUS_ERROR_PERMANENT_MSG_FORMAT_CORRUPT = 226,
    MMS_STORE_STATUS_ERROR_PERMANENT_MSG_NOT_FOUND      = 227,
    MMS_STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL         = 228
} MmsStoreStatus;






typedef enum
{
    MMS_REPLY_CHARGING_DEADLINE_ABSOLUTE = 128,
    MMS_REPLY_CHARGING_DEADLINE_RELATIVE = 129
} MmsReplyChargingDeadlineType;


typedef enum                
{
    MMS_BCC                         = 0x01, 
    MMS_CC                          = 0x02, 
    X_MMS_CONTENT_LOCATION          = 0x03, 
    MMS_CONTENT_TYPE                = 0x04, 
    MMS_DATE                        = 0x05, 
    X_MMS_DELIVERY_REPORT           = 0x06, 
    X_MMS_DELIVERY_TIME             = 0x07, 
    X_MMS_EXPIRY                    = 0x08, 
    MMS_FROM                        = 0x09, 
    X_MMS_MESSAGE_CLASS             = 0x0a, 
    MMS_MESSAGE_ID                  = 0x0b, 
    X_MMS_MESSAGE_TYPE              = 0x0c, 
    X_MMS_VERSION                   = 0x0d, 
    X_MMS_MESSAGE_SIZE              = 0x0e, 
    X_MMS_PRIORITY                  = 0x0f, 
    X_MMS_READ_REPLY                = 0x10, 
    X_MMS_REPORT_ALLOWED            = 0x11, 
    X_MMS_RESPONSE_STATUS           = 0x12, 
    X_MMS_RESPONSE_TEXT             = 0x13, 
    X_MMS_SENDER_VISIBILITY         = 0x14, 
    X_MMS_STATUS                    = 0x15, 
    MMS_SUBJECT                     = 0x16, 
    MMS_TO                          = 0x17, 
    X_MMS_TRANSACTION_ID            = 0x18, 
    X_MMS_RETRIEVE_STATUS           = 0x19, 
    X_MMS_RETRIEVE_TEXT             = 0x1a, 
    X_MMS_READ_STATUS               = 0x1b, 
    X_MMS_REPLY_CHARGING            = 0x1c, 
    X_MMS_REPLY_CHARGING_DEADLINE   = 0x1d, 
    X_MMS_REPLY_CHARGING_ID         = 0x1e, 
    X_MMS_REPLY_CHARGING_SIZE       = 0x1f, 
    X_MMS_PREVIOUSLY_SENT_BY        = 0x20, 
    X_MMS_PREVIOUSLY_SENT_DATE      = 0x21, 
    X_MMS_STORE                     = 0x22, 
    X_MMS_MM_STATE                  = 0x23, 
    X_MMS_MM_FLAGS                  = 0x24, 
    X_MMS_STORE_STATUS              = 0x25, 
    X_MMS_STORE_STATUS_TEXT         = 0x26, 
    X_MMS_STORED                    = 0x27, 
    X_MMS_ATTRIBUTES                = 0x28, 
    X_MMS_TOTALS                    = 0x29, 
    X_MMS_MBOX_TOTALS               = 0x2a, 
    X_MMS_QUOTAS                    = 0x2b, 
    X_MMS_MBOX_QUOTAS               = 0x2c, 
    X_MMS_MESSAGE_COUNT             = 0x2d, 
    MMS_CONTENT                     = 0x2e, 
    X_MMS_START                     = 0x2f, 
    MMS_ADDITIONAL_HEADERS          = 0x30, 
    X_MMS_DISTRIBUTION_INDICATOR    = 0x31, 
    X_MMS_ELEMENT_DESCRIPTOR        = 0x32, 
    X_MMS_LIMIT                     = 0x33, 
    APPLICATION_HEADER              = 0x7f
} MmsHeaderTag;












typedef union
{

    UINT8 *attributes;              
    void *bcc;                      
    void *cc;                       

    void *contentLocation;          
    void *contentType;              
    UINT32 date;                    
    UINT8 deliveryReport;           
    void *deliveryTime;             
    UINT8 distributionIndicator;    
    void *elementDescriptor;        
    void *expiry;                   
    void *from;                     
    UINT32 limit;                   
    void *mboxQuotas;               
    void *mboxTotals;               
    void *messageClass;             
    void *messageCount;             
    char *messageId;                
    UINT32 messageSize;             
    UINT8 messageType;              
    void *mmFlags;                  
    UINT8 *mmState;                 
    void *previouslySentBy;         
    void *previouslySentDate;       
    UINT8 priority;                 
    UINT8 quotas;                   
    UINT8 readReply;                
    UINT8 readStatus;               
    UINT8 replyCharging;            
    void *replyChargingDeadline;    
    char *replyChargingId;          
    UINT32 replyChargingSize;       
    UINT8 reportAllowed;            
    void *responseStatus;           
    void *responseText;             
    UINT8 retrieveStatus;           
    void *retrieveText;             
    UINT8 senderVisibility;         
    UINT32 start;                   
    UINT8 status;                   
    UINT8 store;                    
    UINT8 stored;                   
    UINT8 storeStatus;              
    void *storeStatusText;          
    void *subject;                  
    void *to;                       
    UINT8 totals;                   
    char *transactionId;            
    UINT8 version;                  
    char *applicationHeader;

    
    union 
    {
        UINT8   aUint8;
        UINT32  aUint32;
        UINT8   *aUint8Ptr;
        char    *aCharPtr;
        void    *aVoidPtr;
    } raw;
} MmsHeaderValue;








#define SKIP_HIGH_BIT(a) (unsigned char)((a) & (unsigned char)0x7f)
#define SET_HIGH_BIT(a)  (unsigned char)((a) | (unsigned char)0x80)

#define IS_CTL(c) (((c) >= 0 && (c) <= 31) || (c) == 127)
#define IS_LWS(c) ((c) == 9 || (c) == 10 || (c) == 13 || (c) == 32)
#define IS_OCTET(c) ((c) >= 0 && (c) <= 255)
#define IS_CHAR(c) ((c) >= 0 && (c) <= 127)
#define IS_SEPARATOR(c) ((c) == '(' || (c) == ')' || (c) == '<' || (c) == '>' || \
    (c) == '@' || (c) == ',' || (c) == ';' || (c) == ':' || \
    (c) == '\\' || (c) == '"' || (c) == '/' || (c) == '[' || (c) == ']' || \
    (c) == '?' || (c) == '=' || (c) == '{' || (c) == '}' || (c) == 32 || (c) == 9)
#define IS_TOKEN(c)                 (IS_CHAR(c) && !IS_CTL(c) && !IS_SEPARATOR(c))
#define IS_US_ASCII(c)              IS_CHAR(c)










#define IS_TEXT(c)                  (IS_OCTET(c) && !IS_CTL(c))
#define IS_TEXT_QUOTE(c)            ((c) == TEXT_QUOTE)
#define IS_TEXT_STRING(c)           (IS_TEXT_QUOTE(c) || IS_TEXT(c))
#define IS_QUOTED_STRING_QUOTE(c)   ((c) == 34)
#define IS_SHORT_LENGTH(c)          ((c) < 31)
#define IS_LENGTH_QUOTE(c)          ((c) == LENGTH_QUOTE)
#define IS_SHORT_INTEGER(c)         ((c) & 0x80) 
#define IS_LONG_INTEGER(c) IS_SHORT_LENGTH(c) 
#define IS_INTEGER_VALUE(c)     (IS_SHORT_INTEGER(c) || IS_LONG_INTEGER(c))
#define IS_VALUE_LENGTH(c)      (IS_SHORT_LENGTH(c) || IS_LENGTH_QUOTE(c))
#define IS_ANY_CHARSET(c)       ((c) == 128)








#define IS_EXTENSION_MEDIA(c)   (IS_TEXT(c))
#define IS_CONSTRAINED_ENCODING(c) (IS_EXTENSION_MEDIA(c) || IS_SHORT_INTEGER(c))
#define IS_CONSTRAINED_MEDIA(c) (IS_CONSTRAINED_ENCODING(c))

#define IS_SHIFT_DELIMITER(c)   ((c) == SHIFT_DELIMITER)
#define IS_SHORT_CUT_SHIFT_DELIMITER(c) ((c) >= 0 && (c) <= 31)
#define IS_SHIFT_SEQUENCE(c) (IS_SHIFT_DELIMITER(c) || IS_SHORT_CUT_SHIFT_DELIMITER(c))

#define IS_WELL_KNOWN_HEADER(c) (IS_SHORT_INTEGER(c))
#define IS_WELL_KNOWN_VALUE(c)  (IS_INTEGER_VALUE(c))
#define IS_APPLICATION_HEADER(c) (IS_TOKEN(c))
#define IS_MESSAGE_HEADER(c) (IS_WELL_KNOWN_HEADER(c) || IS_APPLICATION_HEADER(c))
#define IS_POSSIBLE_SHORT_INTEGER(i) ((i) < 0x80)


void *cnvIntegerToUint32( void *from, UINT32 *to, unsigned long size);
UINT8 cnvLenLongInteger(UINT32 n);
UINT8 cnvLenUintvar(UINT32 n);
void *cnvLongIntegerToUint32( void *from, UINT32 *to, unsigned long size);
void *cnvShortIntegerToUchar( void *from, unsigned char *to, unsigned long size);
void *cnvUcharToShortInteger( unsigned char from, void *to, unsigned long size);
void *cnvUintvarToUint32( void *from, UINT32 *to, unsigned long size);
void *cnvUint32ToInteger( UINT32 from, void *to, unsigned long size);
void *cnvUint32ToLongInteger( UINT32 from, void *to, unsigned long size);
void *cnvUint32ToUintvar( UINT32 from, void *to, unsigned long size);
void *cnvUint32ToValueLength( UINT32 from, void *to, unsigned long size);
void *cnvValueLengthToUint32( void *from, UINT32 *to, unsigned long size);

void *mmsGetBody( void *data, unsigned long size);
CMN_BOOL mmsPduAppend( void *header, unsigned long size, unsigned long *length,
    MmsHeaderTag tag, unsigned long valueSize, MmsHeaderValue value);
CMN_BOOL mmsPduExtractValue(unsigned char *pos, MmsHeaderTag tag, 
    MmsHeaderValue *value, unsigned long size);
CMN_BOOL mmsPduGet( void *header, unsigned long size, MmsHeaderTag tag, 
    MmsHeaderValue *value);
void mmsPduGetMessageClass( void *header, unsigned long size,
    MmsMessageClass *mc);
unsigned char *mmsPduNextTag(unsigned char *pos, unsigned long length);
CMN_BOOL mmsPduSanityCheck( void *data, unsigned long size);
unsigned char *mmsPduSkipString(unsigned char *pos, unsigned long length);
CMN_BOOL mmsPduUnrecognized( void *data, unsigned long size);

#endif 

⌨️ 快捷键说明

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