Internal method called when data is ready to be processed on an ILibAsyncSocket The ILibAsyncSocket with pending data
| 876 | // |
| 877 | // <param name="Reader">The ILibAsyncSocket with pending data</param> |
| 878 | void ILibProcessAsyncSocket(struct ILibAsyncSocketModule *Reader, int pendingRead) |
| 879 | { |
| 880 | #ifndef MICROSTACK_NOTLS |
| 881 | int ssllen; |
| 882 | int sslstate; |
| 883 | int sslerror; |
| 884 | SSL *wasssl; |
| 885 | #endif |
| 886 | int iBeginPointer = 0; |
| 887 | int iEndPointer = 0; |
| 888 | int iPointer = 0; |
| 889 | int bytesReceived = 0; |
| 890 | int len; |
| 891 | char *temp; |
| 892 | |
| 893 | // |
| 894 | // If the thing isn't paused, and the user set the pointers such that we still have data |
| 895 | // in our buffers, we need to call the user back with that data, before we attempt to read |
| 896 | // more data off the network |
| 897 | // |
| 898 | if (!pendingRead) |
| 899 | { |
| 900 | if (Reader->internalSocket != ~0 && Reader->PAUSE <= 0 && Reader->BeginPointer != Reader->EndPointer) |
| 901 | { |
| 902 | iBeginPointer = Reader->BeginPointer; |
| 903 | iEndPointer = Reader->EndPointer; |
| 904 | iPointer = 0; |
| 905 | |
| 906 | while (Reader->internalSocket != ~0 && Reader->PAUSE <= 0 && Reader->BeginPointer != Reader->EndPointer && Reader->EndPointer != 0) |
| 907 | { |
| 908 | Reader->EndPointer = Reader->EndPointer-Reader->BeginPointer; |
| 909 | Reader->BeginPointer = 0; |
| 910 | if (Reader->OnData != NULL) |
| 911 | { |
| 912 | Reader->OnData(Reader, Reader->buffer + iBeginPointer, &(iPointer), Reader->EndPointer, &(Reader->OnInterrupt), &(Reader->user), &(Reader->PAUSE)); |
| 913 | } |
| 914 | iBeginPointer += iPointer; |
| 915 | Reader->EndPointer -= iPointer; |
| 916 | if (iPointer == 0) break; |
| 917 | iPointer = 0; |
| 918 | } |
| 919 | Reader->BeginPointer = iBeginPointer; |
| 920 | Reader->EndPointer = iEndPointer; |
| 921 | } |
| 922 | } |
| 923 | |
| 924 | // Reading Body Only |
| 925 | if (Reader->BeginPointer == Reader->EndPointer) |
| 926 | { |
| 927 | Reader->BeginPointer = 0; |
| 928 | Reader->EndPointer = 0; |
| 929 | } |
| 930 | if (Reader->PAUSE > 0) |
| 931 | { |
| 932 | ILibRemoteLogging_printf(ILibChainGetLogger(Reader->Chain), ILibRemoteLogging_Modules_Microstack_AsyncSocket, ILibRemoteLogging_Flags_VerbosityLevel_2, "AsyncSocket[%p] is PAUSED", (void*)Reader); |
| 933 | } |
| 934 | if (!pendingRead || Reader->PAUSE > 0) return; |
| 935 |
no test coverage detected