| /** @file | |
| Definitions for the socket library. | |
| Copyright (c) 2011, Intel Corporation | |
| All rights reserved. This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _SOCKET_INTERNALS_H_ | |
| #define _SOCKET_INTERNALS_H_ | |
| #include <Uefi.h> | |
| //---------------------------------------------------------------------- | |
| // | |
| // The following private files are required to support file descriptors | |
| // | |
| #include <kfile.h> | |
| #include <MainData.h> | |
| #include <Efi/SysEfi.h> | |
| // | |
| // End of private files | |
| // | |
| //---------------------------------------------------------------------- | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiLib.h> | |
| #include <Protocol/EfiSocket.h> | |
| #include <Protocol/ServiceBinding.h> | |
| #include <sys/errno.h> | |
| #include <sys/poll.h> | |
| #include <sys/EfiSysCall.h> | |
| #include <sys/socket.h> | |
| //------------------------------------------------------------------------------ | |
| // Support Routines | |
| //------------------------------------------------------------------------------ | |
| /** | |
| Translate from the socket file descriptor to the socket protocol. | |
| @param [in] s Socket file descriptor returned from ::socket. | |
| @param [in] ppDescriptor Address to receive the descriptor structure | |
| address for the file | |
| @param [in] pErrno Address of the errno variable | |
| @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if | |
| an invalid file descriptor was passed in. | |
| **/ | |
| EFI_SOCKET_PROTOCOL * | |
| BslFdToSocketProtocol ( | |
| int s, | |
| struct __filedes ** ppDescriptor, | |
| int * pErrno | |
| ); | |
| /** | |
| Close the socket | |
| The BslSocketClose routine is called indirectly from the close file | |
| system routine. This routine closes the socket and returns the | |
| status to the caller. | |
| @param[in] pDescriptor Descriptor address for the file | |
| @return This routine returns 0 upon success and -1 upon failure. | |
| In the case of failure, ::errno contains more information. | |
| **/ | |
| int | |
| EFIAPI | |
| BslSocketClose ( | |
| struct __filedes * pDescriptor | |
| ); | |
| /** | |
| Worker routine to close the socket. | |
| @param[in] pSocketProtocol Socket protocol structure address | |
| @param[in] pErrno Address of the ::errno variable | |
| @retval EFI_SUCCESS Successfully closed the socket | |
| **/ | |
| EFI_STATUS | |
| BslSocketCloseWork ( | |
| IN EFI_SOCKET_PROTOCOL * pSocketProtocol, | |
| IN int * pErrno | |
| ); | |
| /** | |
| Poll the socket for activity | |
| @param [in] pDescriptor Descriptor address for the file | |
| @param [in] Events Mask of events to detect | |
| @return Detected events for the socket | |
| **/ | |
| short | |
| EFIAPI | |
| BslSocketPoll ( | |
| IN struct __filedes * pDescriptor, | |
| IN short Events | |
| ); | |
| /** | |
| Build a file descriptor for a socket. | |
| @param [in] pSocketProtocol Socket protocol structure address | |
| @param [in] pErrno Address of the errno variable | |
| @return The file descriptor for the socket or -1 if an error occurs. | |
| **/ | |
| int | |
| BslSocketProtocolToFd ( | |
| IN EFI_SOCKET_PROTOCOL * pSocketProtocol, | |
| IN int * pErrno | |
| ); | |
| /** | |
| Read support routine for sockets | |
| The BslSocketRead routine is called indirectly by the read file | |
| system routine. This routine is typically used for SOCK_STREAM | |
| because it waits for receive data from the target system specified | |
| in the ::connect call. | |
| @param [in] pDescriptor Descriptor address for the file | |
| @param [in] pOffset File offset | |
| @param [in] LengthInBytes Number of bytes to read | |
| @param [in] pBuffer Address of the buffer to receive the data | |
| @return The number of bytes read or -1 if an error occurs. | |
| In the case of an error, ::errno contains more details. | |
| **/ | |
| ssize_t | |
| EFIAPI | |
| BslSocketRead ( | |
| struct __filedes *pDescriptor, | |
| off_t * pOffset, | |
| size_t LengthInBytes, | |
| void * pBuffer | |
| ); | |
| /** | |
| Write support routine for sockets | |
| @param [in] pDescriptor Descriptor address for the file | |
| @param [in] pOffset File offset | |
| @param [in] LengthInBytes Number of bytes to write | |
| @param [in] pBuffer Address of the data | |
| @return The number of bytes written or -1 if an error occurs. | |
| In the case of an error, ::errno contains more details. | |
| **/ | |
| ssize_t | |
| EFIAPI | |
| BslSocketWrite ( | |
| struct __filedes *pDescriptor, | |
| off_t * pOffset, | |
| size_t LengthInBytes, | |
| const void * pBuffer | |
| ); | |
| /** | |
| Validate the socket's file descriptor | |
| @param [in] pDescriptor Descriptor for the file | |
| @param [in] pErrno Address of the errno variable | |
| @return A pointer to the EFI_SOCKET_PROTOCOL structure or NULL if | |
| an invalid file descriptor was passed in. | |
| **/ | |
| EFI_SOCKET_PROTOCOL * | |
| BslValidateSocketFd ( | |
| struct __filedes * pDescriptor, | |
| int * pErrno | |
| ); | |
| //------------------------------------------------------------------------------ | |
| #endif // _SOCKET_INTERNALS_H_ |