SBlog.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:20k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef _SBLOG_H                 /* Allows multiple inclusions */
  23. #define _SBLOG_H
  24. #include <VXIlog.h>              /* For VXIlog base interface */
  25. #include <VXIvalue.h>
  26. #include <time.h>
  27. #include "VXIheaderPrefix.h"
  28. #ifdef SBLOG_EXPORTS
  29. #define SBLOG_API SYMBOL_EXPORT_DECL
  30. #else
  31. #define SBLOG_API SYMBOL_IMPORT_DECL
  32. #endif
  33. /* forward declaration */
  34. #ifdef __cplusplus
  35. extern "C" struct SBlogInterface;
  36. extern "C" {
  37. #else
  38. struct SBlogInterface;
  39. #endif
  40. #define SBLOG_MAX_TAG  79999  /* 80,000 tags, range from 0 - 79,999 */
  41. /**
  42.  * defgroup SBLog VXIlogInterface Implementation
  43.  * 
  44.  * SBlog is an implementation of the VXIlogInterface for logging.
  45.  The SBlogInterface extends the VXIlogInterface to support a listener
  46.  registration mechanism for sending the logs to the final output
  47.  stream. This mechanism allows multiple systems to tap on to a single
  48.  log event so it can be sent both to  a file and to a central logging
  49.  service is desired.  Listeners are invoked through callbacks.  The
  50.  callback call is blocking.  If a listener is going to do signficant
  51.  work or invoke functions which may block, for example a socket write,
  52.  a messsage queue should be implemented so that callback is
  53.  non-blocking. Failure to do this will impact overall system performance.<p>
  54.  
  55.   Across all streams, SBlog is responsible for automatically
  56.   supplying the following information for end consumer use:
  57.   <ul>
  58.     <li> timestamp </li>
  59.     <li> (Error only) error key/values, the error number,
  60.       and the supplied module name. </li>
  61.     <li> (Diagnostic only) tag number, and the
  62.       supplied subtag name </li>
  63.     <li> (Event only) key/values pairs to log in the event </li>
  64.   </ul>
  65.   <p>
  66.  
  67.   In addition, for diagnostic logging the SBlog defines a mechanism
  68.   for enabling/disabling messages on an individual tag basis without
  69.   requiring a recompile for use by consumers of the diagnostic
  70.   log. Diagnostic( ) is highly efficient for cases when the tag is
  71.   disabled: in other words, the lookup for seeing if a tag (an
  72.   integer) is enabled should be done using a simple array or some
  73.   other extremely low-overhead mechanism. SBlog provides a way to
  74.   enable/disable tags on-the-fly (without needing to restart the
  75.   software). <p>
  76.   Each OSB PIK component provides an XML error file which integrators
  77.   can choose to us (or rewrite) to map error numbers and error key/values
  78.   to error text. An XSLT transform can do this in an error viewer.
  79.  */
  80. /*@{*/
  81. /**
  82.  * SBlog definition of a VXIlogStream.
  83.  *
  84.  * SBlog defines a log stream as the following, which
  85.  * contains methods for writing data and closing the stream.
  86.  */
  87. typedef struct SBlogStream
  88. {
  89.   /**
  90.    * Close the stream
  91.    *
  92.    * @param  stream   [IN/OUT] Handle to the stream to close, will be
  93.    *                  set to NULL on success
  94.    *
  95.    * @return VXIlog_RESULT_SUCCESS on success
  96.    */
  97.   VXIlogResult (*Close)(struct SBlogStream  **stream);
  98.   /**
  99.    * Write content to the stream
  100.    *
  101.    * @param buffer   [IN]  Buffer of data to write to the stream
  102.    * @param buflen   [IN]  Number of bytes to write
  103.    * @param nwritten [OUT] Number of bytes actual written, may be less then
  104.    *                 buflen if an error is returned
  105.    * @param stream   [IN]  Handle to the stream to write to
  106.    *
  107.    * @return VXIlog_RESULT_SUCCESS on success
  108.    */
  109.   VXIlogResult (*Write)(struct SBlogStream  *stream,
  110.                         const VXIbyte        *buffer,
  111.                         VXIulong              buflen,
  112.                         VXIulong             *nwritten);
  113. } SBlogStream;
  114. /**
  115.  * Prototype for error listener notification.
  116.  * All error listener registrants must conform to this signature.
  117.  *
  118.  * @param  pThis         [IN] pointer to the SBlogInterface that issued
  119.  *                            the callback
  120.  * @param  moduleName    [IN] module name on which the error occurred
  121.  * @param  errorID       [IN] error number
  122.  * @param  timestamp     [IN] time_t for the time of the log event
  123.  * @param  timestampMsec [IN] Milliseconds for the time of the log event
  124.  * @param  keys          [IN] VXIVector of keys, all VXIString types
  125.  * @param  values        [IN] VXIVector of values, each a VXIInteger, 
  126.  *                            VXIFloat, VXIString, or VXIPtr
  127.  * @param  userdata      [IN] User data that is delivered in the callback
  128.  */
  129. typedef void SBlogErrorListener(struct SBlogInterface *pThis,
  130.                                 const VXIchar         *moduleName,
  131.                                 VXIunsigned            errorID,
  132.                                 time_t                 timestamp,
  133.                                 VXIunsigned            timestampMsec,
  134.                                 const VXIVector       *keys,
  135.                                 const VXIVector       *values,
  136.                                 void                  *userdata);
  137. /**
  138.  * Prototype for diagnostic listener notification
  139.  * All diagnostic listener registrants must conform to this
  140.  * signature.
  141.  *
  142.  * @param  pThis         [IN] pointer to the SBlogInterface that issued
  143.  *                            the callback
  144.  * @param  tagID         [IN] Identifier that classifies a group of logically
  145.  *                            associated diagnostic messages (usually from a
  146.  *                            single software module) that are desirable to
  147.  *                            enable or disable as a single unit. See the top
  148.  *                            of this file for tagID allocation rules.
  149.  * @param  subtag        [IN] Arbitrary string that may be used to subdivide
  150.  *                            the diagnostic messages of that tagID, or 
  151.  *                            provide additional standardized information
  152.  *                            such as the source file, function, or method.
  153.  *                            There are no rules for the content of this
  154.  *                            field.
  155.  * @param  timestamp     [IN] time_t the time of the log event
  156.  * @param  timestampMsec [IN] Milliseconds for the time of the log event
  157.  * @param  printmsg      [IN] NULL terminated string to be printed.
  158.  * @param  userdata      [IN] User data that is delivered in the callback.
  159.  */
  160. typedef void SBlogDiagnosticListener(struct SBlogInterface *pThis,
  161.                                      VXIunsigned            tagID,
  162.                                      const VXIchar         *subtag,
  163.                                      time_t                 timestamp,
  164.                                      VXIunsigned            timestampMsec,
  165.                                      const VXIchar         *printmsg,
  166.                                      void                  *userdata);
  167. /**
  168.  * Prototype for event listener notification.
  169.  *
  170.  * All event listener registrants must conform to this
  171.  * signature.
  172.  *
  173.  * @param pThis         [IN] pointer to the SBlogInterface that issued
  174.  *                           the callback
  175.  * @param eventID       [IN] event number
  176.  * @param timestamp     [IN] time_t for the time of the log event
  177.  * @param timestampMsec [IN] Milliseconds for the time of the log event
  178.  * @param keys          [IN] VXIVector of keys, all VXIString types
  179.  * @param values        [IN] VXIVector of values, each a VXIInteger, VXIFloat,
  180.  *                           VXIString, or VXIPtr
  181.  * @param userdata      [IN] User data that is delivered in the callback.
  182.  */
  183. typedef void SBlogEventListener(struct SBlogInterface *pThis,
  184.                                 VXIunsigned            eventID,
  185.                                 time_t                 timestamp,
  186.                                 VXIunsigned            timestampMsec,
  187.                                 const VXIVector       *keys,
  188.                                 const VXIVector       *values,
  189.                                 void                  *userdata);
  190. /**
  191.  * Prototype for content listener notification
  192.  * All content listener registrants must conform to this
  193.  * signature.
  194.  *
  195.  * @param pThis         [IN] pointer to the SBlogInterface that issued
  196.  *                           the callback
  197.  * @param  moduleName   [IN] Name of the software module that is 
  198.  *                           outputting the data
  199.  * @param  contentType  [IN] MIME content type for the data
  200.  * @param  userdata     [IN] User data that is delivered in the callback.
  201.  * @param  logKey       [OUT] Key name to cross-reference this content
  202.  *                            in logging errors, events, and/or diagnostic 
  203.  *                            messages. Ownership is passed on success, 
  204.  *                            the user will call VXIStringDestroy( ) to
  205.  *                            free this when no longer required.
  206.  * @param  logValue     [OUT] Value to cross-reference this content
  207.  *                            in logging errors, events, and/or diagnostic 
  208.  *                            messages. Ownership is passed on success, the
  209.  *                            user will call VXIStringDestroy( ) to free
  210.  *                            this when no longer required.
  211.  * @param  stream       [OUT] Handle for writing the content and
  212.  *                            closing the stream
  213.  */
  214. typedef VXIlogResult SBlogContentListener(struct SBlogInterface *pThis,
  215.                                           const VXIchar         *moduleName,
  216.                                           const VXIchar         *contentType,
  217.                                           void                  *userdata,
  218.                                           VXIString            **logKey,
  219.                                           VXIString            **logValue,
  220.                                           SBlogStream          **stream);
  221. /**
  222.  * SBlog extension interface to the VXIlog interface.
  223.  * SBlog defines extensions to the VXIlog interface that support
  224.  * the tag mechanism and the listener registration 
  225.  */
  226. typedef struct SBlogInterface
  227. {
  228.   /**
  229.    * Base interface, must appear first
  230.    */
  231.   VXIlogInterface vxilog;
  232.   
  233.   /**
  234.    * Subscribe the given listener for errors.
  235.    * The given listener will be notified for all errors (via
  236.    * VXIlog::Error or VError calls) as each calls is processed by
  237.    * SBlog. The call cannot be disabled.
  238.    *
  239.    * @param alistener   [IN] Subscribing listener 
  240.    * @param userdata    [IN] User data that will be returned to the 
  241.    *                         listener when notification occurs.
  242.    *                         Note: the same listener may be 
  243.    *                         registered multiple times, as long
  244.    *                         as unique userdata is passed. In this
  245.    *                         case, the listener will be called once
  246.    *                         for each unique userdata.
  247.    * 
  248.    * @return    VXIlog_RESULT_SUCCESS:       success
  249.    * @return    VXIlog_RESULT_SYSTEM_ERROR:  internal error
  250.    */
  251.   VXIlogResult (*RegisterErrorListener)(
  252.       struct SBlogInterface *pThis,
  253.       SBlogErrorListener    *alistener,
  254.       void                  *userdata);
  255.   /**
  256.    * Unsubscribes the given listener.
  257.    * Unsubscribes the given listener/userdata combination.
  258.    *
  259.    * @param alistener  [IN] The subscribing listener 
  260.    * @param userdata   [IN] User data that was passed in during registration.
  261.    * 
  262.    * @return   VXIlog_RESULT_SUCCESS:       success
  263.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  264.    */
  265.   VXIlogResult (*UnregisterErrorListener)(
  266.       struct SBlogInterface *pThis,
  267.       SBlogErrorListener    *alistener,
  268.       void                  *userdata);
  269.   /**
  270.    * Subscribe the given listener for a diagnostic message.
  271.    *
  272.    * The given listener will be notified for all diagnostic
  273.    * messages (via VXIlog::Diagnostic or VDiagnostic calls) as each
  274.    * calls is processed by SBlog. The set of Diagnostics that are
  275.    * returned is controlled by ControlDiagnosticTag to either true or
  276.    * false.  By default all tags are assumed to be false when the
  277.    * listener is registered, and therefore off. A tag must be
  278.    * specifically turned to true (enabled) before any callbacks will
  279.    * be generated.  If a tag is enabled, all callbacks that registered
  280.    * on a given SBlog interface will be invoked. Generally, only one
  281.    * callback will be registered on each interface.
  282.    *
  283.    * @param alistener  [IN] Subscribing listener 
  284.    * @param userdata   [IN] User data that will be returned to the 
  285.    *                        listener when notification occurs.
  286.    *                        Note: the same listener may be 
  287.    *                        registered multiple times, as long
  288.    *                        as unique userdata is passed. In this
  289.    *                        case, the listener will be called once
  290.    *                        for each unique userdata.
  291.    * 
  292.    * @return   VXIlog_RESULT_SUCCESS:       success
  293.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  294.    */
  295.   VXIlogResult (*RegisterDiagnosticListener)(
  296.       struct SBlogInterface   *pThis,
  297.       SBlogDiagnosticListener *alistener,
  298.       void                    *userdata);
  299.   /**
  300.    * Unsubscribes the given listener.
  301.    *
  302.    * Unsubscribes the given listener/userdata combination.
  303.    *
  304.    * @param alistener  [IN] The subscribing listener 
  305.    * @param userdata   [IN] User data that was passed in during registration.
  306.    * 
  307.    * @return   VXIlog_RESULT_SUCCESS:       success
  308.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  309.    */
  310.   VXIlogResult (*UnregisterDiagnosticListener)(
  311.       struct SBlogInterface    *pThis,
  312.       SBlogDiagnosticListener  *alistener,
  313.       void                     *userdata);
  314.   /**
  315.    * Turn the diagnostic tag on (true) or off (false).
  316.    *
  317.    * All diagnostic log tags are assumed to be off unless
  318.    * specifically enabled.  This must be done by calling this function
  319.    * and setting the given tag to true.
  320.    *
  321.    * @param  tagID    [IN] Identifier that classifies a group of logically
  322.    *                  associated diagnostic messages (usually from a single
  323.    *                  software module) that are desirable to enable or
  324.    *                  disable as a single unit. See the top of this file 
  325.    *                  for tagID allocation rules.
  326.    * @param  state    [IN] Boolean flag to turn the tag on (TRUE) or
  327.    *                  off (FALSE).
  328.    *
  329.    * @return   VXIlog_RESULT_SUCCESS:      success
  330.    * @return   VXIlog_RESULT_SYSTEM_ERROR: internal error
  331.    */
  332.   VXIlogResult (*ControlDiagnosticTag)(
  333.       struct SBlogInterface *pThis,
  334.       VXIunsigned            tagID,
  335.       VXIbool                state);
  336.   /**
  337.    * Subscribe the given listener for events.
  338.    *
  339.    * The given listener will be notified for all events (via
  340.    * VXIlog::Event or VEvent calls) as each calls is processed by
  341.    * SBlog. The call cannot be disabled.
  342.    *
  343.    * @param alistener  [IN] Subscribing listener 
  344.    * @param userdata   [IN] User data that will be returned to the 
  345.    *                        listener when notification occurs.
  346.    *                        Note: the same listener may be 
  347.    *                        registered multiple times, as long
  348.    *                        as unique userdata is passed. In this
  349.    *                        case, the listener will be called once
  350.    *                        for each unique userdata.
  351.    * 
  352.    * @return   VXIlog_RESULT_SUCCESS:       success
  353.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  354.    */
  355.   VXIlogResult (*RegisterEventListener)(
  356.       struct SBlogInterface *pThis,
  357.       SBlogEventListener    *alistener,
  358.       void                  *userdata);
  359.   /**
  360.    * Unsubscribes the given listener.
  361.    *
  362.    *  Unsubscribes the given listener/userdata combination.
  363.    *
  364.    * @param alistener  [IN] The subscribing listener 
  365.    * @param userdata   [IN] User data that was passed in during registration.
  366.    * 
  367.    * @return   VXIlog_RESULT_SUCCESS:       success
  368.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  369.    */
  370.   VXIlogResult (*UnregisterEventListener)(
  371.       struct SBlogInterface  *pThis,
  372.       SBlogEventListener     *alistener,
  373.       void                   *userdata);
  374.   /**
  375.    * Subscribe the given listener for content write requests.
  376.    *
  377.    * The given listener will be notified for all content write
  378.    * requests (via VXIlog::ContentOpen( ) calls) as each request is 
  379.    * processed by SBlog. The call cannot be disabled.
  380.    *
  381.    * @param alistener  [IN] Subscribing listener 
  382.    * @param userdata   [IN] User data that will be returned to the 
  383.    *                        listener when notification occurs.
  384.    *                        Note: the same listener may be 
  385.    *                        registered multiple times, as long
  386.    *                        as unique userdata is passed. In this
  387.    *                        case, the listener will be called once
  388.    *                        for each unique userdata.
  389.    * 
  390.    * @return   VXIlog_RESULT_SUCCESS:       success
  391.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  392.    */
  393.   VXIlogResult (*RegisterContentListener)(
  394.       struct SBlogInterface *pThis,
  395.       SBlogContentListener  *alistener,
  396.       void                  *userdata);
  397.   /**
  398.    * Unsubscribes the given listener.
  399.    *
  400.    * Unsubscribes the given listener/userdata combination.
  401.    *
  402.    * @param alistener  [IN] The subscribing listener 
  403.    * @param userdata   [IN] User data that was passed in during registration.
  404.    * 
  405.    * @return   VXIlog_RESULT_SUCCESS:       success
  406.    * @return   VXIlog_RESULT_SYSTEM_ERROR:  internal error
  407.    */
  408.   VXIlogResult (*UnregisterContentListener)(
  409.       struct SBlogInterface  *pThis,
  410.       SBlogContentListener   *alistener,
  411.       void                   *userdata);
  412. } SBlogInterface;
  413. /**
  414.  * Global platform initialization of SBlog
  415.  *
  416.  * @result VXIlog_RESULT_SUCCESS on success
  417.  */
  418. SBLOG_API VXIlogResult SBlogInit(void);
  419. /**
  420.  * Global platform shutdown of Log
  421.  *
  422.  * @result VXIlog_RESULT_SUCCESS on success
  423.  */
  424. SBLOG_API VXIlogResult SBlogShutDown(void);
  425. /**
  426.  * Create a new log service handle.
  427.  *
  428.  * @param log [IN/OUT] Will hold the VXIlog resource.
  429.  *
  430.  * @result VXIlog_RESULT_SUCCESS on success 
  431.  */
  432. SBLOG_API VXIlogResult SBlogCreateResource(VXIlogInterface **log);
  433. /**
  434.  * Destroy the interface and free internal resources
  435.  *
  436.  * @param log [IN/OUT] The log resource created by SBlogCreateResource()
  437.  *
  438.  * @result VXIlog_RESULT_SUCCESS on success 
  439.  */
  440. SBLOG_API VXIlogResult SBlogDestroyResource(VXIlogInterface **log);
  441. /*@}*/
  442. #ifdef __cplusplus
  443. } /* extern "C" */
  444. #endif
  445. #include "VXIheaderSuffix.h"
  446. #endif  /* include guard */