💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Vgmi › files › b6cfe9512cb3258e39ea0035c9220… captured on 2023-12-28 at 15:42:46. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

Go Back

0 /*

1 * ISC License

2 * Copyright (c) 2023 RMF <rawmonk@firemail.cc>

3 */

4 #include <stdlib.h>

5 #include <stdio.h>

6 #include <errno.h>

7 #include <string.h>

8

9 #include <sys/types.h>

10 #include <sys/socket.h>

11 #include <netdb.h>

12 #include <tls.h>

13

14 #include "strlcpy.h"

15 #include "macro.h"

16 #include "error.h"

17

18 #define ERROR_MASK 0xFFFF

19

20 char error_tls[1024];

21

22 int error_string(int error, char *out, size_t len) {

23 const char *ptr;

24 switch (error & ERROR_MASK) {

25 case ERROR_MEMORY_FAILURE:

26 strlcpy(out, "Memory failure", len);

27 break;

28 case ERROR_ERRNO:

29 strlcpy(out, strerror(errno), len);

30 break;

31 case ERROR_UNKNOWN_PROTOCOL:

32 strlcpy(out, "Unknown protocol", len);

33 break;

34 case ERROR_UNSUPPORTED_PROTOCOL:

35 strlcpy(out, "Protocol not supported", len);

36 break;

37 case ERROR_UNKNOWN_HOST:

38 strlcpy(out, "Unknown host", len);

39 break;

40 case ERROR_TLS_FAILURE:

41 strlcpy(out, error_tls, len);

42 break;

43 case ERROR_GETADDRINFO:

44 ptr = gai_strerror(-((error & 0xFFFF0000) >> 16));

45 strlcpy(out, ptr, len);

46 break;

47 case ERROR_INVALID_DATA:

48 strlcpy(out, "Invalid response", len);

49 break;

50 case ERROR_INVALID_ARGUMENT:

51 strlcpy(out, "Invalid argument", len);

52 break;

53 case ERROR_INVALID_METADATA:

54 strlcpy(out, "No metadata", len);

55 break;

56 case ERROR_INVALID_ADDRESS:

57 strlcpy(out, "Invalid address", len);

58 break;

59 case ERROR_INVALID_STATUS:

60 strlcpy(out, "Invalid status", len);

61 break;

62 case ERROR_NO_CRLN:

63 strlcpy(out, "Invalid response", len);

64 break;

65 case ERROR_TERMBOX_FAILURE:

66 strlcpy(out, "Failed initializing TUI mode", len);

67 break;

68 case ERROR_TOO_MANY_REDIRECT:

69 strlcpy(out, "Too many redirects", len);

70 break;

71 case ERROR_INVALID_URL:

72 strlcpy(out, "Invalid URL", len);

73 break;

74 case ERROR_CERTIFICATE_MISMATCH:

75 strlcpy(out, "The server certificate changed", len);

76 break;

77 case ERROR_STORAGE_ACCESS:

78 snprintf(out, len, "Failed to access disk storage (%s)",

79 strerror(errno));

80 break;

81 case ERROR_SANDBOX_FAILURE:

82 snprintf(out, len, "Failed to apply sandboxing (%s)",

83 strerror(errno));

84 break;

85 case ERROR_RESPONSE_TOO_LARGE:

86 strlcpy(out, "The server response is too large", len);

87 break;

88 case ERROR_XDG:

89 strlcpy(out, "Unable to open the link", len);

90 break;

91 default:

92 snprintf(out, len, "Unknown error (%d)", error);

93 return -1;

94 }

95 return 0;

96 }

97