Back to index

lightning-sunbird  0.9+nobinonly
tmTransaction.h
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is Mozilla Transaction Manager.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corp.
00018  * Portions created by the Initial Developer are Copyright (C) 2003
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *   John Gaunt <jgaunt@netscape.com>
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef _tmTransaction_H_
00039 #define _tmTransaction_H_
00040 
00041 #include "tmUtils.h"
00042 
00044 //
00045 // Message format
00046 //
00047 // |------------------------------------|--
00048 // |QueueID                             |  |
00049 // |------------------------------------|  |
00050 // | Action - Post/Flush/Attach etc     |  |- this is the tmHeader struct
00051 // |------------------------------------|  |
00052 // |Status                              |  | 
00053 // |------------------------------------|  |
00054 // |Padding                             |  |
00055 // |------------------------------------|--
00056 // |Message Data (payload)              |
00057 // |------------------------------------|
00058 //
00059 // The Attach call is a special case in that it doesn't have a QueueID yet. A
00060 //   QueueID will be 0's. The message Data will be the Queue Name String which
00061 //   will be the profile name with a domain attached, a domain being 
00062 //   [prefs|cookies|etc]
00063 //
00065 
00069 struct tmHeader {
00070   PRInt32  queueID;     // will be the index of the queue in the TM, can be < 0
00071   PRUint32 action;      // defined by tmUtils.h will be > 0
00072   PRInt32  status;      // return values from methods, could be < 0
00073   PRUint32 reserved;    // not currently used, maintaining word alignment
00074 };
00075 
00112 class tmTransaction
00113 {
00114 
00115 public:
00116 
00118   // Constructor(s) & Destructor
00119 
00120   tmTransaction(): mHeader(nsnull), mRawMessageLength(0), mOwnerID(0) { }
00121 
00122   virtual ~tmTransaction();
00123 
00125   // Public Member Functions
00126 
00127   // Initializer ////////////
00128 
00158   nsresult Init(PRUint32 aOwnerID,
00159                 PRInt32 aQueueID,
00160                 PRUint32 aAction,
00161                 PRInt32 aStatus,
00162                 const PRUint8 *aMessage, 
00163                 PRUint32 aLength);
00164 
00165   // Data Accessors /////////
00166 
00170   const PRUint8* GetMessage() const { return (PRUint8*)(mHeader + 1); }
00171 
00175   PRUint32 GetMessageLength() const { 
00176     return (mRawMessageLength > sizeof(tmHeader)) ?
00177       (mRawMessageLength - sizeof(tmHeader)) : 0;
00178   }
00179 
00185   const PRUint8* GetRawMessage() const { return (PRUint8*) mHeader; }
00186 
00190   PRUint32 GetRawMessageLength() const { return mRawMessageLength; }
00191 
00196   PRInt32 GetQueueID() const { return mHeader->queueID; }
00197 
00201   PRUint32 GetAction() const { return mHeader->action; }
00202 
00207   PRInt32 GetStatus() const { return mHeader->status; }
00208 
00213   PRUint32 GetOwnerID() const { return mOwnerID; }
00214 
00215   // Data Mutator ///////////
00216 
00221   void SetQueueID(PRInt32 aID) { mHeader->queueID = aID; }
00222 
00223 protected:
00224 
00226   // Protected Member Variables
00227 
00228   tmHeader* mHeader;            // points to beginning of entire message
00229   PRUint32  mRawMessageLength;  // length of entire message, incl tmHeader
00230   PRUint32  mOwnerID;           // client who sent this trans. - a IPC ClientID
00231 
00232 };
00233 
00234 #endif