1 /** @file
2 
3   A brief file description
4 
5   @section license License
6 
7   Licensed to the Apache Software Foundation (ASF) under one
8   or more contributor license agreements.  See the NOTICE file
9   distributed with this work for additional information
10   regarding copyright ownership.  The ASF licenses this file
11   to you under the Apache License, Version 2.0 (the
12   "License"); you may not use this file except in compliance
13   with the License.  You may obtain a copy of the License at
14 
15       http://www.apache.org/licenses/LICENSE-2.0
16 
17   Unless required by applicable law or agreed to in writing, software
18   distributed under the License is distributed on an "AS IS" BASIS,
19   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20   See the License for the specific language governing permissions and
21   limitations under the License.
22  */
23 
24 #pragma once
25 
26 #include "Protocol.h"
27 
28 typedef int (*TxnSMHandler)(TSCont contp, TSEvent event, void *data);
29 
30 TSCont TxnSMCreate(TSMutex pmutex, TSVConn client_vc, int server_port);
31 
32 #define TXN_SM_ALIVE 0xAAAA0123
33 #define TXN_SM_DEAD 0xFEE1DEAD
34 #define TXN_SM_ZERO 0x00001111
35 
36 /* The Txn State Machine */
37 typedef struct _TxnSM {
38   unsigned int q_magic;
39 
40   TSMutex q_mutex;
41   TSAction q_pending_action;
42   TxnSMHandler q_current_handler;
43 
44   TSVConn q_client_vc;
45   TSVConn q_server_vc;
46 
47   char *q_client_request;
48   char *q_server_response;
49 
50   char *q_file_name;
51   TSCacheKey q_key;
52 
53   char *q_server_name;
54   int q_server_port;
55 
56   TSVIO q_client_read_vio;
57   TSVIO q_client_write_vio;
58   TSIOBuffer q_client_request_buffer;
59   TSIOBuffer q_client_response_buffer;
60   TSIOBufferReader q_client_request_buffer_reader;
61   TSIOBufferReader q_client_response_buffer_reader;
62 
63   TSVIO q_server_read_vio;
64   TSVIO q_server_write_vio;
65   TSIOBuffer q_server_request_buffer;
66   TSIOBuffer q_server_response_buffer;
67   TSIOBufferReader q_server_request_buffer_reader;
68   int q_server_response_length;
69   int q_block_bytes_read;
70   int q_cache_response_length;
71 
72   /* Cache related */
73   TSVConn q_cache_vc;
74   TSIOBufferReader q_cache_response_buffer_reader;
75   TSVIO q_cache_read_vio;
76   TSVIO q_cache_write_vio;
77   TSIOBuffer q_cache_read_buffer;
78   TSIOBufferReader q_cache_read_buffer_reader;
79 
80 } TxnSM;
81