• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _DNS_IDNSTLSSOCKET_H
18 #define _DNS_IDNSTLSSOCKET_H
19 
20 #include <cstddef>
21 #include <cstdint>
22 
23 #include <netdutils/Slice.h>
24 
25 namespace android {
26 namespace net {
27 
28 class IDnsTlsSocketObserver;
29 class DnsTlsSessionCache;
30 
31 // A class for managing a TLS socket that sends and receives messages in
32 // [length][value] format, with a 2-byte length (i.e. DNS-over-TCP format).
33 // This interface is not aware of query-response pairing or anything else about DNS.
34 class IDnsTlsSocket {
35   public:
~IDnsTlsSocket()36     virtual ~IDnsTlsSocket(){};
37     // Send a query on the provided SSL socket.  |query| contains
38     // the body of a query, not including the ID bytes.  This function will typically return before
39     // the query is actually sent.  If this function fails, the observer will be
40     // notified that the socket is closed.
41     // Note that a true return value indicates successful sending, not receipt of a response.
42     virtual bool query(uint16_t id, const netdutils::Slice query) = 0;
43 
44     virtual bool startHandshake() = 0;
45 };
46 
47 }  // end of namespace net
48 }  // end of namespace android
49 
50 #endif  // _DNS_IDNSTLSSOCKET_H
51