1/** @file
2  The function declaration that provided for Socket Interface.
3
4  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
5
6  This program and the accompanying materials
7  are licensed and made available under the terms and conditions of the BSD License
8  which accompanies this distribution.  The full text of the license may be found at
9  http://opensource.org/licenses/bsd-license.php.
10
11  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14**/
15
16#ifndef _SOCK_IMPL_H_
17#define _SOCK_IMPL_H_
18
19#include "Socket.h"
20
21/**
22  Signal a event with the given status.
23
24  @param[in] Token        The token's event is to be signaled.
25  @param[in] TokenStatus  The status to be sent with the event.
26
27**/
28#define SIGNAL_TOKEN(Token, TokenStatus) \
29  do { \
30    (Token)->Status = (TokenStatus); \
31    gBS->SignalEvent ((Token)->Event); \
32  } while (0)
33
34#define SOCK_HEADER_SPACE (60 + 60 + 72)
35
36/**
37  Process the TCP send data, buffer the tcp txdata and append
38  the buffer to socket send buffer, then try to send it.
39
40  @param[in]  Sock              Pointer to the socket.
41  @param[in]  TcpTxData         Pointer to the application provided send buffer.
42
43  @retval EFI_SUCCESS           The operation completed successfully.
44  @retval EFI_OUT_OF_RESOURCES  Failed due to resource limits.
45
46**/
47EFI_STATUS
48SockProcessTcpSndData (
49  IN SOCKET   *Sock,
50  IN VOID     *TcpTxData
51  );
52
53/**
54  Get received data from the socket layer to the receive token.
55
56  @param[in, out]  Sock       Pointer to the socket.
57  @param[in, out]  RcvToken   Pointer to the application provided receive token.
58
59  @return The length of data received in this token.
60
61**/
62UINT32
63SockProcessRcvToken (
64  IN OUT SOCKET        *Sock,
65  IN OUT SOCK_IO_TOKEN *RcvToken
66  );
67
68/**
69  Flush the sndBuffer and rcvBuffer of socket.
70
71  @param[in, out]  Sock                  Pointer to the socket.
72
73**/
74VOID
75SockConnFlush (
76  IN OUT SOCKET *Sock
77  );
78
79/**
80  Cancel the tokens in the specific token list.
81
82  @param[in]       Token                 Pointer to the Token. If NULL, all tokens
83                                         in SpecifiedTokenList will be canceled.
84  @param[in, out]  SpecifiedTokenList    Pointer to the token list to be checked.
85
86  @retval EFI_SUCCESS          Cancel the tokens in the specific token listsuccessfully.
87  @retval EFI_NOT_FOUND        The Token is not found in SpecifiedTokenList.
88
89**/
90EFI_STATUS
91SockCancelToken (
92  IN     SOCK_COMPLETION_TOKEN  *Token,
93  IN OUT LIST_ENTRY             *SpecifiedTokenList
94  );
95
96/**
97  Create a socket with initial data SockInitData.
98
99  @param[in]  SockInitData          Pointer to the initial data of the socket.
100
101  @return Pointer to the newly created socket, return NULL when exception occured.
102
103**/
104SOCKET *
105SockCreate (
106  IN SOCK_INIT_DATA *SockInitData
107  );
108
109/**
110  Destroy a socket.
111
112  @param[in, out]  Sock                  Pointer to the socket.
113
114**/
115VOID
116SockDestroy (
117  IN OUT SOCKET *Sock
118  );
119
120#endif
121