/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_bluetooth_bluedroid_BluetoothMapBMessage_h #define mozilla_dom_bluetooth_bluedroid_BluetoothMapBMessage_h #include "BluetoothCommon.h" #include "nsAutoPtr.h" #include "nsRefPtrHashtable.h" #include "nsTArray.h" BEGIN_BLUETOOTH_NAMESPACE enum BMsgParserState { BMSG_PARSING_STATE_INVALID, BMSG_PARSING_STATE_BEGIN_BMSG, BMSG_PARSING_STATE_VERSION, BMSG_PARSING_STATE_STATUS, BMSG_PARSING_STATE_TYPE, BMSG_PARSING_STATE_FOLDER, BMSG_PARSING_STATE_ORIGINATOR, BMSG_PARSING_STATE_VCARD, BMSG_PARSING_STATE_BEGIN_ENVELOPE, BMSG_PARSING_STATE_RECIPIENT, BMSG_PARSING_STATE_BEGIN_BODY, BMSG_PARSING_STATE_BEGIN_MSG, }; class VCard { public: NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VCard) VCard(); void Parse(const nsAutoCString& aCurrLine); void GetName(nsACString& aName); void GetFormattedName(nsACString& aFormattedName); void GetTelephone(nsACString& aTelephone); void GetEmail(nsACString& aEmail); void Dump(); private: ~VCard(); nsCString mName; nsCString mFormattedName; nsCString mTelephone; nsCString mEmail; }; /* This class represents MAP bMessage. The bMessage object encapsulates * delivered message objects and provides additionally a suitable set properties * with helpful information. The general encoding characteristics as defined for * vCards. */ class BluetoothMapBMessage { public: NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BluetoothMapBMessage) // Parse OBEX body and return bMessage object. BluetoothMapBMessage(uint8_t* aObexBody, int aLength); void GetRecipients(nsTArray>& aRecipients); void GetOriginators(nsTArray>& aRecipients); void GetBody(nsACString& aBody); void Dump(); private: ~BluetoothMapBMessage(); void ProcessDecode(const char* aBody); void ParseBeginBmsg(const nsAutoCString& aCurrLine); void ParseVersion(const nsAutoCString& aCurrLine); void ParseStatus(const nsAutoCString& aCurrLine); void ParseType(const nsAutoCString& aCurrLine); void ParseFolder(const nsAutoCString& aCurrLine); void ParseOriginator(const nsAutoCString& aCurrLine); void ParseVCard(const nsAutoCString& aCurrLine); void ParseEnvelope(const nsAutoCString& aCurrLine); void ParseRecipient(const nsAutoCString& aCurrLine); void ParseBody(const nsAutoCString& aCurrLine); void ParseBMsg(const nsAutoCString& aCurrLine); /* Indicate whether a message has been read by MCE or not. * MCE shall be responsible to set this status. */ bool mReadStatus; // Indicate bMessage location nsCString mFolderName; /* Part-ID is used when the content cannot be delivered in ones * bmessage-content object. * The first bmessage-content object's part-ID shall be 0, and the following * ones have part-ID incremented by 1 each. */ int mPartId; // The encoding used by bmessage-body-content if the content is binary nsCString mEncoding; /* The character-set is used in bmessage-body-content if the content * is textual. */ nsCString mCharset; // mLanguage may be used if the message includes textual content nsCString mLanguage; /* Length of the bmessage-body-content, starting with the "B" of the first * occurrence of "BEGIN_BMSG" and ending with the of the last occurrence * of "END:MSG". */ nsCString mBMsgLength; // mMessageBody represents bmessage-body-content nsCString mBMsgBody; // mType: EMAIL/SMS_GSM/SMS_CDMA/MMS nsCString mType; // Current parser state enum BMsgParserState mState; // Previous parser state enum BMsgParserState mUnwindState; /* Current level of bmessage-envelope. The maximum level of * encapsulation shall be 3. */ int mEnvelopeLevel; /* Based on the formal BNF definition of the bMessage format, originators * and recipients may appear 0 or more times. * |mOriginators| represents the original sender of the messages, and * |mRecipients| represents the recipient of the message. */ nsTArray> mOriginators; nsTArray> mRecipients; }; END_BLUETOOTH_NAMESPACE #endif //mozilla_dom_bluetooth_bluedroid_BluetoothMapBMessage_h