home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 December / PCWorld_1998-12_cd.iso / software / sybase / ASA / asa60.exe / data1.cab / h_files / dbrmt.h next >
C/C++ Source or Header  |  1998-07-27  |  7KB  |  179 lines

  1.  /****************************************************************
  2.  *       Copyright (C) 1988-1998, by Sybase, Inc.                *
  3.  *       All rights reserved. No part of this software may be    *
  4.  *       reproduced in any form or by any means - graphic,       *
  5.  *       electronic or mechanical, including photocopying,       *
  6.  *       recording, taping or information storage and retrieval  *
  7.  *       systems - except with the written permission of         *
  8.  *       Sybase, Inc.                                            *
  9.  ****************************************************************/
  10.  
  11. #ifndef _DBRMT_H_INCLUDED
  12. #define _DBRMT_H_INCLUDED
  13. #define II_DBRMT_H
  14.  
  15. #include "sqlca.h"
  16.  
  17. #if defined(__unix) || defined(_AIX)
  18.     #if !defined(a_bit_field)
  19.         #define a_bit_field unsigned int
  20.         #define a_bit_short unsigned int
  21.     #endif
  22. #else
  23.     #if !defined(a_bit_field)
  24.         #define a_bit_field unsigned char
  25.         #define a_bit_short unsigned short
  26.     #endif
  27. #endif
  28.  
  29. // The purpose of the message queue callback is to process messages
  30. // while SQL Remote is running. The parameter is a number of milliseconds
  31. // to sleep. When SQL Remote is busy, the value of this parameter will be 0.
  32. // When SQL Remote is idle, waiting for incoming messages or for the time
  33. // to process the transaction log, the parameter will be non-zero.
  34. // This routine should return 1 normally, or 0 to stop SQL Remote processing.
  35.  
  36. #if defined( _SQL_PACK_STRUCTURES )
  37. #include "pshpk1.h"
  38. #endif
  39.  
  40. #if !defined( _DLLAPI_H_INCLUDED )
  41.     #include "dllapi.h"
  42. #endif
  43.  
  44. #if defined( __cplusplus )
  45.     extern "C" {
  46.     typedef short _callback_pref (_callback MSG_QUEUE_ROUTINE)( unsigned long );
  47.     }
  48. #elif defined( MAC )
  49.     typedef _callback short    (MSG_QUEUE_ROUTINE)( unsigned long );
  50. #else
  51.     typedef short        (_callback MSG_QUEUE_ROUTINE)( unsigned long );
  52. #endif
  53.  
  54. typedef MSG_QUEUE_ROUTINE *    MSG_QUEUE_CALLBACK;
  55.  
  56. typedef struct a_remote_sql {
  57.     unsigned short    version;
  58.     MSG_CALLBACK    confirmrtn;
  59.     MSG_CALLBACK    errorrtn;
  60.     MSG_CALLBACK    msgrtn;
  61.     MSG_QUEUE_CALLBACK    msgqueuertn;
  62.     char *        connectparms;
  63.     char *        transaction_logs;   // directory with transaction logs (dbremote)
  64.     a_bit_field        receive : 1;
  65.     a_bit_field        send : 1;
  66.     a_bit_field        verbose : 1;
  67.     a_bit_field        deleted : 1;
  68.     a_bit_field        apply : 1;
  69.     a_bit_field        batch : 1;
  70.     a_bit_field        more : 1;        // more fields after this (5.0.02)
  71.     a_bit_field        triggers : 1;        // replicate trigger actions
  72.     a_bit_field        debug : 1;
  73.     a_bit_field        rename_log : 1;        // rename and restart transaction log (dbremote)
  74.     a_bit_field        latest_backup : 1;  // process log until latest backup
  75.     a_bit_field        scan_log : 1;       // scan transaction log (ssremote)
  76.     a_bit_field        link_debug : 1;        // debug for links
  77.     a_bit_field        unused_bits : 3;
  78.     unsigned long    max_length;        // max length of messages
  79.     unsigned long    memory;            // max memory used building messages
  80.     unsigned long    frequency;        // polling frequency for incoming messages
  81.     unsigned long    threads;        // worker threads applying messages
  82.     unsigned long    operations;        // grouping incoming transactions
  83.     char *        queueparms;        // stable queue connect parms (ssremote)
  84.     char *        locale;                // locale (ssremote)
  85. } a_remote_sql;
  86.  
  87. #define    SEND_ONLY        0
  88. #define    RECEIVE_ONLY        1
  89. #define    SEND_AND_RECEIVE    2
  90.  
  91. typedef struct a_message_sync {
  92.     unsigned short    version;
  93.     MSG_CALLBACK    confirmrtn;
  94.     MSG_CALLBACK    errorrtn;
  95.     MSG_CALLBACK    msgrtn;
  96.     a_bit_field        link_debug :1;
  97.     a_bit_field        unused_bits : 7;
  98.     char *        scriptfile;
  99.     short        debug;
  100.     unsigned short    comm_mode;        // send or receive or both, etc.
  101.     unsigned long    max_length;        // max length of messages
  102.     unsigned long    memory;            // max memory used building messages
  103. } a_message_sync;
  104.  
  105. #if defined( _SQL_PACK_STRUCTURES )
  106. #include "poppk.h"
  107. #endif
  108.  
  109. extern _crtn short _entry DBMessageSync( a_message_sync * );
  110.  
  111. extern _crtn short _entry DBRemoteSQL( a_remote_sql * );
  112.  
  113. //************* SQL Remote message encoding interface *******************
  114. //              =====================================
  115. //
  116. // This is an interface for encoding SQL Remote messages
  117. // When SQL Remote generates a message it is in the form of random looking
  118. // bytes. It is sometimes necessary to transform this message into a format
  119. // more suitable for sending through a communications channel.
  120. // one example would be translating the message bytes into uuencoded text
  121. // for transport on a medium which only supports ascii characters.
  122. // SQL Remote ships with an encoding DLL that does something similar to
  123. // this.
  124. //
  125. // Any code which handles a Text message should assume that it may be corrupt
  126. // and return ENCODE_CORRUPT if it is. It is not necessary that this
  127. // level ensures the message is not corrupt (ie. by including a
  128. // crc in the message) SQL Remote will do corruption detection on the 
  129. // message after this level is done with it.
  130. //
  131. // If the functionality of the existing dll is required in a new dll
  132. // the new dll can load and call the existing dll
  133.  
  134. typedef enum encode_ret {
  135.     ENCODE_SUCCESS,
  136.     ENCODE_CORRUPT,
  137.     ENCODE_OUT_OF_MEM
  138. } encode_ret;
  139.  
  140.  
  141. typedef void a_encode_info;
  142.  
  143. extern _crtn a_encode_info * _entry EncodeInit(   unsigned long   max_encoded_len,
  144.                               unsigned long * max_unencoded_len,
  145.                           MSG_CALLBACK      msgcb,
  146.                               char *       local_user );
  147. // EncodeInit() is passed the max_encoded_len and needs to fill in
  148. // max_unendoed_len.
  149. // max_unencoded_len must be set to the maximum length of an unencoded
  150. // message that will produce an encoded message of size less that or
  151. // equal to max_encoded_len
  152. // for example if encoding a message doubles its size then EncodedInit()
  153. // would contain the line
  154. // => *max_unencoded_len = max_encoded_len/2;
  155.  
  156. extern _crtn void _entry EncodeFini( a_encode_info * info );
  157. extern _crtn encode_ret _entry EncodeMessage(    a_encode_info*    info,
  158.                         char *        remote_user,
  159.                         char *        inmessage,
  160.                         unsigned long     inmessage_len,
  161.                         char *        outbuf,
  162.                         unsigned long     outbuf_len,
  163.                         unsigned long *    outmessage_len );
  164. // outbuf is preallocated to the length passed in as outbuflen
  165. // the resulting message size should be placed in *outmessagelen
  166. extern _crtn encode_ret _entry DecodeMessage(    a_encode_info *    info,
  167.                         char *        inmessage,
  168.                         unsigned long    inmessage_len,
  169.                         char *        outbuf,
  170.                         unsigned long    outbuf_len,
  171.                         unsigned long * outmessage_len );
  172. // this function is very similar to EncodeMessage, in this case
  173. // inbuf contains an encoded messag and upon exit outbuf
  174. // should contain the decoded message, outmessage_len should
  175. // be the length of the decoded message
  176. // NOTE: see comments above about detecting corrupt messages
  177.  
  178. #endif
  179.