]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/d/src/thrift/server/transport/base.d
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / d / src / thrift / server / transport / base.d
CommitLineData
f67539c2
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19module thrift.server.transport.base;
20
21import thrift.base;
22import thrift.transport.base;
23import thrift.util.cancellation;
24
25/**
26 * Some kind of I/O device enabling servers to listen for incoming client
27 * connections and communicate with them via a TTransport interface.
28 */
29interface TServerTransport {
30 /**
31 * Starts listening for server connections.
32 *
33 * Just as simliar functions commonly found in socket libraries, this
34 * function does not block.
35 *
36 * If the socket is already listening, nothing happens.
37 *
38 * Throws: TServerTransportException if listening failed or the transport
39 * was already listening.
40 */
41 void listen();
42
43 /**
44 * Closes the server transport, causing it to stop listening.
45 *
46 * Throws: TServerTransportException if the transport was not listening.
47 */
48 void close();
49
50 /**
51 * Returns whether the server transport is currently listening.
52 */
53 bool isListening() @property;
54
55 /**
56 * Accepts a client connection and returns an opened TTransport for it,
57 * never returning null.
58 *
59 * Blocks until a client connection is available.
60 *
61 * Params:
62 * cancellation = If triggered, requests the call to stop blocking and
63 * return with a TCancelledException. Implementations are free to
64 * ignore this if they cannot provide a reasonable.
65 *
66 * Throws: TServerTransportException if accepting failed,
67 * TCancelledException if it was cancelled.
68 */
69 TTransport accept(TCancellation cancellation = null) out (result) {
70 assert(result !is null);
71 }
72}
73
74/**
75 * Server transport exception.
76 */
77class TServerTransportException : TException {
78 /**
79 * Error codes for the various types of exceptions.
80 */
81 enum Type {
82 ///
83 UNKNOWN,
84
85 /// The server socket is not listening, but excepted to be.
86 NOT_LISTENING,
87
88 /// The server socket is already listening, but expected not to be.
89 ALREADY_LISTENING,
90
91 /// An operation on the primary underlying resource, e.g. a socket used
92 /// for accepting connections, failed.
93 RESOURCE_FAILED
94 }
95
96 ///
97 this(Type type, string file = __FILE__, size_t line = __LINE__, Throwable next = null) {
98 this(errorMsg(type), type, file, line, next);
99 }
100
101 ///
102 this(string msg, string file = __FILE__, size_t line = __LINE__,
103 Throwable next = null)
104 {
105 this(msg, Type.UNKNOWN, file, line, next);
106 }
107
108 ///
109 this(string msg, Type type, string file = __FILE__, size_t line = __LINE__,
110 Throwable next = null)
111 {
112 super(msg, file, line, next);
113 type_ = type;
114 }
115
116 ///
117 Type type() const nothrow @property {
118 return type_;
119 }
120
121protected:
122 Type type_;
123
124private:
125 string errorMsg(Type type) {
126 string msg = "TTransportException: ";
127 switch (type) {
128 case Type.UNKNOWN: msg ~= "Unknown server transport exception"; break;
129 case Type.NOT_LISTENING: msg ~= "Server transport not listening"; break;
130 case Type.ALREADY_LISTENING: msg ~= "Server transport already listening"; break;
131 case Type.RESOURCE_FAILED: msg ~= "An underlying resource failed"; break;
132 default: msg ~= "(Invalid exception type)"; break;
133 }
134 return msg;
135 }
136}
137