Changes In Branch ofsock Through [771537a7e4] Excluding Merge-Ins
This is equivalent to a diff from 5da858b5be to 771537a7e4
2021-04-30
| ||
22:04 | Merge trunk into branch "ofsock" check-in: 4eb272eb8b user: js tags: ofsock | |
2021-04-07
| ||
21:45 | Remove incomplete SCTP support check-in: a863ef544f user: js tags: trunk | |
21:44 | Move incomplete SCTP support into a new branch check-in: 41fc0bb66e user: js tags: sctp | |
21:39 | Merge trunk into branch "ofsock" check-in: 771537a7e4 user: js tags: ofsock | |
21:38 | Remove utils/ofsock, it has been moved to a branch check-in: 5da858b5be user: js tags: trunk | |
21:37 | Move incomplete utils/ofsock into a new branch check-in: 52b10168ce user: js tags: ofsock | |
21:29 | Remove incomplete -[OFInvocation invoke] support check-in: c71d3d9433 user: js tags: trunk | |
2020-05-28
| ||
23:45 | Remove utils/ofsock, as it is not ready for 1.0 check-in: cc7caa19be user: js tags: 1.0 | |
Modified .fossil-settings/clean-glob from [436c792c19] to [21f56a0dfc].
︙ | ︙ | |||
44 45 46 47 48 49 50 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp | > | 44 45 46 47 48 49 50 51 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp utils/ofsock/ofsock |
Modified .fossil-settings/ignore-glob from [5da8718334] to [7ba37c3560].
︙ | ︙ | |||
49 50 51 52 53 54 55 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp | > | 49 50 51 52 53 54 55 56 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp utils/ofsock/ofsock |
Modified .gitignore from [0c715f3134] to [5a4054131c].
︙ | ︙ | |||
49 50 51 52 53 54 55 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp | > | 49 50 51 52 53 54 55 56 | tests/tests.arm9 tests/tests.nds utils/objfw-config utils/ofarc/ofarc utils/ofdns/ofdns utils/ofhash/ofhash utils/ofhttp/ofhttp utils/ofsock/ofsock |
Modified configure.ac from [bd49401db1] to [b9427c0b96].
︙ | ︙ | |||
1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 | AC_SUBST(OF_HTTP_CLIENT_TESTS_M, "OFHTTPClientTests.m") ]) AC_SUBST(OFDNS, "ofdns") AS_IF([test x"$enable_files" != x"no"], [ AC_SUBST(OFHTTP, "ofhttp") ]) ]) AC_DEFUN([CHECK_BUILTIN_BSWAP], [ AC_MSG_CHECKING(for __builtin_bswap$1) AC_LINK_IFELSE([ AC_LANG_PROGRAM([ #include <stdint.h> | > | 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 | AC_SUBST(OF_HTTP_CLIENT_TESTS_M, "OFHTTPClientTests.m") ]) AC_SUBST(OFDNS, "ofdns") AS_IF([test x"$enable_files" != x"no"], [ AC_SUBST(OFHTTP, "ofhttp") ]) AC_SUBST(OFSOCK, "ofsock") ]) AC_DEFUN([CHECK_BUILTIN_BSWAP], [ AC_MSG_CHECKING(for __builtin_bswap$1) AC_LINK_IFELSE([ AC_LANG_PROGRAM([ #include <stdint.h> |
︙ | ︙ |
Modified extra.mk.in from [cbdd53a0db] to [b1888f97ac].
︙ | ︙ | |||
40 41 42 43 44 45 46 47 48 49 50 51 52 53 | LOOKUP_ASM_AMIGALIB_A = @LOOKUP_ASM_AMIGALIB_A@ LOOKUP_ASM_LIB_A = @LOOKUP_ASM_LIB_A@ MAP_LDFLAGS = @MAP_LDFLAGS@ OFARC = @OFARC@ OFDNS = @OFDNS@ OFHASH = @OFHASH@ OFHTTP = @OFHTTP@ OF_BLOCK_TESTS_M = @OF_BLOCK_TESTS_M@ OF_EPOLL_KERNEL_EVENT_OBSERVER_M = @OF_EPOLL_KERNEL_EVENT_OBSERVER_M@ OF_HTTP_CLIENT_TESTS_M = @OF_HTTP_CLIENT_TESTS_M@ OF_KQUEUE_KERNEL_EVENT_OBSERVER_M = @OF_KQUEUE_KERNEL_EVENT_OBSERVER_M@ OF_POLL_KERNEL_EVENT_OBSERVER_M = @OF_POLL_KERNEL_EVENT_OBSERVER_M@ OF_SCTP_SOCKET_M = @OF_SCTP_SOCKET_M@ OF_SELECT_KERNEL_EVENT_OBSERVER_M = @OF_SELECT_KERNEL_EVENT_OBSERVER_M@ | > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | LOOKUP_ASM_AMIGALIB_A = @LOOKUP_ASM_AMIGALIB_A@ LOOKUP_ASM_LIB_A = @LOOKUP_ASM_LIB_A@ MAP_LDFLAGS = @MAP_LDFLAGS@ OFARC = @OFARC@ OFDNS = @OFDNS@ OFHASH = @OFHASH@ OFHTTP = @OFHTTP@ OFSOCK = @OFSOCK@ OF_BLOCK_TESTS_M = @OF_BLOCK_TESTS_M@ OF_EPOLL_KERNEL_EVENT_OBSERVER_M = @OF_EPOLL_KERNEL_EVENT_OBSERVER_M@ OF_HTTP_CLIENT_TESTS_M = @OF_HTTP_CLIENT_TESTS_M@ OF_KQUEUE_KERNEL_EVENT_OBSERVER_M = @OF_KQUEUE_KERNEL_EVENT_OBSERVER_M@ OF_POLL_KERNEL_EVENT_OBSERVER_M = @OF_POLL_KERNEL_EVENT_OBSERVER_M@ OF_SCTP_SOCKET_M = @OF_SCTP_SOCKET_M@ OF_SELECT_KERNEL_EVENT_OBSERVER_M = @OF_SELECT_KERNEL_EVENT_OBSERVER_M@ |
︙ | ︙ |
Modified utils/Makefile from [521b7f89ce] to [82be3d0820].
1 2 3 4 5 6 7 8 9 10 11 12 13 | include ../extra.mk SUBDIRS += ${OFARC} \ ${OFDNS} \ ${OFHASH} \ ${OFHTTP} \ completions include ../buildsys.mk DISTCLEAN = objfw-config install-extra: objfw-config objfw-compile objfw-new | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | include ../extra.mk SUBDIRS += ${OFARC} \ ${OFDNS} \ ${OFHASH} \ ${OFHTTP} \ ${OFSOCK} \ completions include ../buildsys.mk DISTCLEAN = objfw-config install-extra: objfw-config objfw-compile objfw-new |
︙ | ︙ |
Added utils/ofsock/Makefile version [0438ba0691].
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | include ../../extra.mk PROG = ofsock${PROG_SUFFIX} SRCS = OFSock.m include ../../buildsys.mk PACKAGE_NAME = ofsock ${PROG}: ${LIBOBJFW_DEP_LVL2} ${LIBOBJFWRT_DEP_LVL2} CPPFLAGS += -I../../src \ -I../../src/runtime \ -I../../src/exceptions \ -I../.. LIBS := -L../../src -lobjfw \ -L../../src/runtime -L../../src/runtime/linklib ${RUNTIME_LIBS} \ ${LIBS} LD = ${OBJC} LDFLAGS += ${LDFLAGS_RPATH} |
Added utils/ofsock/OFSock.m version [1838a7f311].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | /* * Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFApplication.h" #import "OFArray.h" #import "OFNumber.h" #import "OFPair.h" #import "OFStdIOStream.h" #import "OFStream.h" #import "OFString.h" #import "OFTCPSocket.h" #import "OFURL.h" #define BUFFER_LEN 4096 @interface OFSock: OFObject <OFApplicationDelegate, OFStreamDelegate> { char _buffer[BUFFER_LEN]; OFMutableArray OF_GENERIC(OFPair OF_GENERIC(OFStream *, OFStream *) *) *_streams; int _errors; } @end OF_APPLICATION_DELEGATE(OFSock) static OFPair OF_GENERIC(OFStream *, OFStream *) * streamFromString(OFString *string) { OFURL *URL; OFString *scheme; if ([string isEqual: @"-"]) return [OFPair pairWithFirstObject: of_stdin secondObject: of_stdout]; URL = [OFURL URLWithString: string]; scheme = URL.scheme; if ([scheme isEqual: @"tcp"]) { OFTCPSocket *sock = [OFTCPSocket socket]; if (URL.port == nil) { [of_stderr writeLine: @"Need a port!"]; [OFApplication terminateWithStatus: 1]; } [sock connectToHost: URL.host port: URL.port.shortValue]; return [OFPair pairWithFirstObject: sock secondObject: sock]; } [of_stderr writeFormat: @"Invalid protocol: %@\n", scheme]; [OFApplication terminateWithStatus: 1]; abort(); } @implementation OFSock - (void)applicationDidFinishLaunching { OFArray OF_GENERIC(OFString *) *arguments = [OFApplication arguments]; if (arguments.count < 1) { [of_stderr writeLine: @"Need at least one argument!"]; [OFApplication terminateWithStatus: 1]; } _streams = [[OFMutableArray alloc] init]; for (OFString *argument in arguments) { OFPair *pair = streamFromString(argument); [pair.firstObject setDelegate: self]; [_streams addObject: pair]; } if (arguments.count == 1) { of_stdin.delegate = self; [_streams addObject: [OFPair pairWithFirstObject: of_stdin secondObject: of_stdout]]; } for (OFPair *pair in _streams) [pair.firstObject asyncReadIntoBuffer: _buffer length: BUFFER_LEN]; } - (void)removeDeadStream: (OFStream *)stream { size_t count = _streams.count; for (size_t i = 0; i < count; i++) { if ([[_streams objectAtIndex: i] firstObject] == stream) { [_streams removeObjectAtIndex: i]; break; } } if (_streams.count < 2) [OFApplication terminateWithStatus: _errors]; } - (bool)stream: (OFStream *)stream didReadIntoBuffer: (void *)buffer length: (size_t)length exception: (id)exception { if (exception != nil) { [of_stderr writeFormat: @"Exception on stream %@: %@\n", stream, exception]; _errors++; [self removeDeadStream: stream]; return false; } if (stream.atEndOfStream) { [self removeDeadStream: stream]; return false; } for (OFPair *pair in _streams) { if (pair.firstObject == stream) continue; [pair.secondObject writeBuffer: buffer length: length]; } return true; } @end |