| /* |
| * Copyright (c) 2016, The OpenThread Authors. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. Neither the name of the copyright holder nor the |
| * names of its contributors may be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #define _CRT_SECURE_NO_WARNINGS |
| |
| #include <windows.h> |
| #include <winnt.h> |
| #include <winsock2.h> |
| #include <ws2ipdef.h> |
| #include <IPHlpApi.h> |
| #include <mstcpip.h> |
| #include <rpc.h> |
| #include <rpcdce.h> |
| #include <assert.h> |
| #include <new> |
| #include <vector> |
| #include <tuple> |
| |
| using namespace std; |
| |
| // Define to export necessary functions |
| #define OTDLL |
| #define OTNODEAPI EXTERN_C __declspec(dllexport) |
| |
| #include <openthread/openthread.h> |
| #include <openthread/border_router.h> |
| #include <openthread/dataset_ftd.h> |
| #include <openthread/thread_ftd.h> |
| #include <openthread/commissioner.h> |
| #include <openthread/joiner.h> |
| #include <openthread/platform/logging-windows.h> |
| #include <otNode.h> |
| |
| void Unload(); |
| |
| FORCEINLINE |
| VOID |
| InitializeListHead( |
| _Out_ PLIST_ENTRY ListHead |
| ) |
| { |
| ListHead->Flink = ListHead->Blink = ListHead; |
| } |
| |
| FORCEINLINE |
| PLIST_ENTRY |
| RemoveHeadList( |
| _Inout_ PLIST_ENTRY ListHead |
| ) |
| |
| { |
| |
| PLIST_ENTRY Entry; |
| PLIST_ENTRY NextEntry; |
| Entry = ListHead->Flink; |
| NextEntry = Entry->Flink; |
| ListHead->Flink = NextEntry; |
| NextEntry->Blink = ListHead; |
| return Entry; |
| } |
| |
| FORCEINLINE |
| VOID |
| InsertTailList( |
| _Inout_ PLIST_ENTRY ListHead, |
| _Out_ __drv_aliasesMem PLIST_ENTRY Entry |
| ) |
| { |
| |
| PLIST_ENTRY PrevEntry; |
| PrevEntry = ListHead->Blink; |
| Entry->Flink = ListHead; |
| Entry->Blink = PrevEntry; |
| PrevEntry->Flink = Entry; |
| ListHead->Blink = Entry; |
| } |
| |
| _Must_inspect_result_ |
| BOOLEAN |
| CFORCEINLINE |
| IsListEmpty( |
| _In_ const LIST_ENTRY * ListHead |
| ) |
| { |
| return (BOOLEAN)(ListHead->Flink == ListHead); |
| } |