1 | /*************************************************************************** |
2 | * _ _ ____ _ |
3 | * Project ___| | | | _ \| | |
4 | * / __| | | | |_) | | |
5 | * | (__| |_| | _ <| |___ |
6 | * \___|\___/|_| \_\_____| |
7 | * |
8 | * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al. |
9 | * |
10 | * This software is licensed as described in the file COPYING, which |
11 | * you should have received as part of this distribution. The terms |
12 | * are also available at https://curl.se/docs/copyright.html. |
13 | * |
14 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
15 | * copies of the Software, and permit persons to whom the Software is |
16 | * furnished to do so, under the terms of the COPYING file. |
17 | * |
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
19 | * KIND, either express or implied. |
20 | * |
21 | ***************************************************************************/ |
22 | |
23 | #include "curl_setup.h" |
24 | |
25 | #ifdef __AMIGA__ |
26 | # include "amigaos.h" |
27 | # if defined(HAVE_PROTO_BSDSOCKET_H) && !defined(USE_AMISSL) |
28 | # include <amitcp/socketbasetags.h> |
29 | # endif |
30 | # ifdef __libnix__ |
31 | # include <stabs.h> |
32 | # endif |
33 | #endif |
34 | |
35 | /* The last #include files should be: */ |
36 | #include "curl_memory.h" |
37 | #include "memdebug.h" |
38 | |
39 | #ifdef __AMIGA__ |
40 | #if defined(HAVE_PROTO_BSDSOCKET_H) && !defined(USE_AMISSL) |
41 | struct Library *SocketBase = NULL; |
42 | extern int errno, h_errno; |
43 | |
44 | #ifdef __libnix__ |
45 | void __request(const char *msg); |
46 | #else |
47 | # define __request(msg) Printf(msg "\n\a") |
48 | #endif |
49 | |
50 | void Curl_amiga_cleanup() |
51 | { |
52 | if(SocketBase) { |
53 | CloseLibrary(SocketBase); |
54 | SocketBase = NULL; |
55 | } |
56 | } |
57 | |
58 | bool Curl_amiga_init() |
59 | { |
60 | if(!SocketBase) |
61 | SocketBase = OpenLibrary("bsdsocket.library" , 4); |
62 | |
63 | if(!SocketBase) { |
64 | __request("No TCP/IP Stack running!" ); |
65 | return FALSE; |
66 | } |
67 | |
68 | if(SocketBaseTags(SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (ULONG) &errno, |
69 | SBTM_SETVAL(SBTC_LOGTAGPTR), (ULONG) "curl" , |
70 | TAG_DONE)) { |
71 | __request("SocketBaseTags ERROR" ); |
72 | return FALSE; |
73 | } |
74 | |
75 | #ifndef __libnix__ |
76 | atexit(Curl_amiga_cleanup); |
77 | #endif |
78 | |
79 | return TRUE; |
80 | } |
81 | |
82 | #ifdef __libnix__ |
83 | ADD2EXIT(Curl_amiga_cleanup, -50); |
84 | #endif |
85 | |
86 | #endif /* HAVE_PROTO_BSDSOCKET_H */ |
87 | |
88 | #ifdef USE_AMISSL |
89 | void Curl_amiga_X509_free(X509 *a) |
90 | { |
91 | X509_free(a); |
92 | } |
93 | |
94 | /* AmiSSL replaces many functions with macros. Curl requires pointer |
95 | * to some of these functions. Thus, we have to encapsulate these macros. |
96 | */ |
97 | |
98 | #include "warnless.h" |
99 | |
100 | int (SHA256_Init)(SHA256_CTX *c) |
101 | { |
102 | return SHA256_Init(c); |
103 | }; |
104 | |
105 | int (SHA256_Update)(SHA256_CTX *c, const void *data, size_t len) |
106 | { |
107 | return SHA256_Update(c, data, curlx_uztoui(len)); |
108 | }; |
109 | |
110 | int (SHA256_Final)(unsigned char *md, SHA256_CTX *c) |
111 | { |
112 | return SHA256_Final(md, c); |
113 | }; |
114 | |
115 | void (X509_INFO_free)(X509_INFO *a) |
116 | { |
117 | X509_INFO_free(a); |
118 | }; |
119 | |
120 | #endif /* USE_AMISSL */ |
121 | #endif /* __AMIGA__ */ |
122 | |
123 | |