Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

Location:
EcnlProtoTool/trunk/mrbgems/mruby-socket
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mrbgems/mruby-socket/README.md

    r279 r331  
    3737Copyright (c) 2013 Internet Initiative Japan Inc.
    3838
    39 Permission is hereby granted, free of charge, to any person obtaining a 
    40 copy of this software and associated documentation files (the "Software"), 
    41 to deal in the Software without restriction, including without limitation 
    42 the rights to use, copy, modify, merge, publish, distribute, sublicense, 
    43 and/or sell copies of the Software, and to permit persons to whom the 
     39Permission is hereby granted, free of charge, to any person obtaining a
     40copy of this software and associated documentation files (the "Software"),
     41to deal in the Software without restriction, including without limitation
     42the rights to use, copy, modify, merge, publish, distribute, sublicense,
     43and/or sell copies of the Software, and to permit persons to whom the
    4444Software is furnished to do so, subject to the following conditions:
    4545
    46 The above copyright notice and this permission notice shall be included in 
     46The above copyright notice and this permission notice shall be included in
    4747all copies or substantial portions of the Software.
    4848
    49 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
    50 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
    51 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
    52 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
    53 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
    54 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
     49THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     50IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     51FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     52AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     53LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     54FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    5555DEALINGS IN THE SOFTWARE.
  • EcnlProtoTool/trunk/mrbgems/mruby-socket/mrbgem.rake

    r321 r331  
    44
    55  spec.cc.include_paths << "#{build.root}/src"
    6  
     6
    77  # If Windows, use winsock
    88  if ( /mswin|mingw|win32/ =~ RUBY_PLATFORM ) then
  • EcnlProtoTool/trunk/mrbgems/mruby-socket/mrblib/socket.rb

    r321 r331  
    155155  end
    156156
    157   def to_sockaddr 
     157  def to_sockaddr
    158158    @sockaddr
    159159  end
     
    234234      s = nil
    235235      e = SocketError
    236       Addrinfo.foreach(host, service) { |ai|
     236      Addrinfo.foreach(host, service, nil, Socket::SOCK_STREAM, Socket::IPPROTO_TCP) do |ai|
    237237        begin
    238238          s = Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0)
     
    245245          Socket._connect(s, ai.to_sockaddr)
    246246          super(s, "r+")
    247           return
     247          e = nil
     248          break
    248249        rescue => e0
    249250          e = e0
    250251        end
    251       }
    252       raise e
     252      end
     253      if e != nil
     254        raise e
     255      end
    253256    end
    254257  end
  • EcnlProtoTool/trunk/mrbgems/mruby-socket/src/const.def

    • Property svn:keywords deleted
  • EcnlProtoTool/trunk/mrbgems/mruby-socket/src/socket.c

    r321 r331  
    44** See Copyright Notice in mruby.h
    55*/
    6 #include <sys/types.h>
    7 #include <sys/socket.h>
    8 #include <sys/un.h>
    9 #include <netinet/in.h>
    10 #include <netinet/tcp.h>
    11 #include <arpa/inet.h>
    12 #include <fcntl.h>
    13 #include <netdb.h>
    14 #include <unistd.h>
     6
     7#ifdef _WIN32
     8  #define _WIN32_WINNT 0x0501
     9
     10  #include <winsock2.h>
     11  #include <ws2tcpip.h>
     12  #include <windows.h>
     13
     14  #define SHUT_RDWR SD_BOTH
     15#else
     16  #include <sys/types.h>
     17  #include <sys/socket.h>
     18  #include <sys/un.h>
     19  #include <netinet/in.h>
     20  #include <netinet/tcp.h>
     21  #include <arpa/inet.h>
     22  #include <fcntl.h>
     23  #include <netdb.h>
     24  #include <unistd.h>
     25#endif
     26
    1527#include <stddef.h>
    1628#include <string.h>
    17 
    18 /*#include <unistd.h>*/
    19 extern int gethostname(char *name, size_t len);
    2029
    2130#include "mruby.h"
     
    2736#include "error.h"
    2837
    29 #ifndef NI_MAXHOST
    30 #define NI_MAXHOST 255
    31 #endif
    32 #ifndef NI_MAXSERV
    33 #define NI_MAXSERV 32
    34 #endif
    3538#define E_SOCKET_ERROR             (mrb_class_get(mrb, "SocketError"))
    3639
     
    4144#endif
    4245
    43 //#ifdef _WIN32
     46#ifdef _WIN32
    4447const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
    4548{
     
    5962        memset(&in, 0, sizeof(in));
    6063        in.sin6_family = AF_INET6;
    61         memcpy(&in.sin6_addr, src, sizeof(struct in6_addr));
     64        memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
    6265        getnameinfo((struct sockaddr *)&in, sizeof(struct
    6366                    sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
     
    9295}
    9396
    94 //#endif
     97#endif
    9598
    9699static mrb_value
     
    192195}
    193196
     197#ifndef _WIN32
    194198static mrb_value
    195199mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self)
     
    202206  return mrb_str_new_cstr(mrb, ((struct sockaddr_un *)RSTRING_PTR(sastr))->sun_path);
    203207}
     208#endif
    204209
    205210static mrb_value
     
    256261static mrb_value
    257262mrb_basicsocket_getpeereid(mrb_state *mrb, mrb_value self)
    258 { 
     263{
    259264#ifdef HAVE_GETPEEREID
    260265  mrb_value ary;
     
    262267  uid_t euid;
    263268  int s;
    264  
     269
    265270  s = socket_fd(mrb, self);
    266271  if (getpeereid(s, &euid, &egid) != 0)
     
    279284static mrb_value
    280285mrb_basicsocket_getpeername(mrb_state *mrb, mrb_value self)
    281 { 
     286{
    282287  struct sockaddr_storage ss;
    283288  socklen_t salen;
    284  
     289
    285290  salen = sizeof(ss);
    286291  if (getpeername(socket_fd(mrb, self), (struct sockaddr *)&ss, &salen) != 0)
     
    292297static mrb_value
    293298mrb_basicsocket_getsockname(mrb_state *mrb, mrb_value self)
    294 { 
     299{
    295300  struct sockaddr_storage ss;
    296301  socklen_t salen;
    297  
     302
    298303  salen = sizeof(ss);
    299304  if (getsockname(socket_fd(mrb, self), (struct sockaddr *)&ss, &salen) != 0)
     
    305310static mrb_value
    306311mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self)
    307 { 
     312{
    308313  char opt[8];
    309314  int s;
     
    325330static mrb_value
    326331mrb_basicsocket_recv(mrb_state *mrb, mrb_value self)
    327 { 
     332{
    328333  int n;
    329334  mrb_int maxlen, flags = 0;
     
    341346static mrb_value
    342347mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self)
    343 { 
     348{
    344349  int n;
    345350  mrb_int maxlen, flags = 0;
     
    364369static mrb_value
    365370mrb_basicsocket_send(mrb_state *mrb, mrb_value self)
    366 { 
     371{
    367372  int n;
    368373  mrb_int flags;
     
    383388static mrb_value
    384389mrb_basicsocket_setnonblock(mrb_state *mrb, mrb_value self)
    385 { 
     390{
    386391  int fd, flags;
    387392  mrb_value bool;
     393#ifdef _WIN32
     394  u_long mode = 1;
     395#endif
    388396
    389397  mrb_get_args(mrb, "o", &bool);
    390398  fd = socket_fd(mrb, self);
     399#ifdef _WIN32
     400  flags = ioctlsocket(fd, FIONBIO, &mode);
     401  if (flags != NO_ERROR)
     402    mrb_sys_fail(mrb, "ioctlsocket");
     403#else
    391404  flags = fcntl(fd, F_GETFL, 0);
    392405  if (flags == 1)
     
    398411  if (fcntl(fd, F_SETFL, flags) == -1)
    399412    mrb_sys_fail(mrb, "fcntl");
     413#endif
    400414  return mrb_nil_value();
    401415}
     
    403417static mrb_value
    404418mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self)
    405 { 
     419{
    406420  int argc, s;
    407421  mrb_int level = 0, optname;
     
    420434      optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
    421435    } else if (mrb_fixnum_p(optval)) {
    422       mrb_int i = mrb_fixnum(optval);
    423       optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
     436      if (optname == IP_MULTICAST_TTL || optname == IP_MULTICAST_LOOP) {
     437        char uc = mrb_fixnum(optval);
     438        optval = mrb_str_new(mrb, &uc, sizeof(uc));
     439      } else {
     440        mrb_int i = mrb_fixnum(optval);
     441        optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
     442      }
    424443    } else {
    425444      mrb_raise(mrb, E_ARGUMENT_ERROR, "optval should be true, false, an integer, or a string");
     
    443462static mrb_value
    444463mrb_basicsocket_shutdown(mrb_state *mrb, mrb_value self)
    445 { 
     464{
    446465  mrb_int how = SHUT_RDWR;
    447466
     
    454473static mrb_value
    455474mrb_ipsocket_ntop(mrb_state *mrb, mrb_value klass)
    456 { 
     475{
    457476  mrb_int af, n;
    458477  char *addr, buf[50];
     
    468487static mrb_value
    469488mrb_ipsocket_pton(mrb_state *mrb, mrb_value klass)
    470 { 
     489{
    471490  mrb_int af, n;
    472491  char *bp, buf[50];
     
    498517static mrb_value
    499518mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self)
    500 { 
     519{
    501520  struct sockaddr_storage ss;
    502521  socklen_t socklen;
     
    528547  mrb_value buf;
    529548  size_t bufsize;
    530  
     549
    531550#ifdef HOST_NAME_MAX
    532551  bufsize = HOST_NAME_MAX + 1;
     
    568587{
    569588  mrb_value sastr;
    570   int s;
     589  mrb_int s;
    571590
    572591  mrb_get_args(mrb, "iS", &s, &sastr);
    573   if (bind(s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
     592  if (bind((int)s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
    574593    mrb_sys_fail(mrb, "bind");
    575594  }
     
    581600{
    582601  mrb_value sastr;
    583   int s;
     602  mrb_int s;
    584603
    585604  mrb_get_args(mrb, "iS", &s, &sastr);
    586   if (connect(s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
     605  if (connect((int)s, (struct sockaddr *)RSTRING_PTR(sastr), (socklen_t)RSTRING_LEN(sastr)) == -1) {
    587606    mrb_sys_fail(mrb, "connect");
    588607  }
     
    593612mrb_socket_listen(mrb_state *mrb, mrb_value klass)
    594613{
    595   int backlog, s;
     614  mrb_int backlog, s;
    596615
    597616  mrb_get_args(mrb, "ii", &s, &backlog);
    598   if (listen(s, backlog) == -1) {
     617  if (listen((int)s, (int)backlog) == -1) {
    599618    mrb_sys_fail(mrb, "listen");
    600619  }
     
    623642mrb_socket_sockaddr_un(mrb_state *mrb, mrb_value klass)
    624643{
     644#ifdef _WIN32
     645  mrb_raise(mrb, E_NOTIMP_ERROR, "sockaddr_un unsupported on Windows");
     646  return mrb_nil_value();
     647#else
    625648  struct sockaddr_un *sunp;
    626649  mrb_value path, s;
    627  
     650
    628651  mrb_get_args(mrb, "S", &path);
    629652  if (RSTRING_LEN(path) > sizeof(sunp->sun_path) - 1) {
     
    637660  mrb_str_resize(mrb, s, sizeof(struct sockaddr_un));
    638661  return s;
     662#endif
    639663}
    640664
     
    642666mrb_socket_socketpair(mrb_state *mrb, mrb_value klass)
    643667{
     668#ifdef _WIN32
     669  mrb_raise(mrb, E_NOTIMP_ERROR, "socketpair unsupported on Windows");
     670  return mrb_nil_value();
     671#else
    644672  mrb_value ary;
    645673  mrb_int domain, type, protocol;
     
    655683  mrb_ary_push(mrb, ary, mrb_fixnum_value(sv[1]));
    656684  return ary;
     685#endif
    657686}
    658687
     
    686715 * will break on socket descriptors.
    687716 */
     717#ifdef _WIN32
     718static mrb_value
     719mrb_win32_basicsocket_close(mrb_state *mrb, mrb_value self)
     720{
     721  if (closesocket(socket_fd(mrb, self)) != NO_ERROR)
     722    mrb_raise(mrb, E_SOCKET_ERROR, "closesocket unsuccessful");
     723  return mrb_nil_value();
     724}
     725
     726#define E_EOF_ERROR                (mrb_class_get(mrb, "EOFError"))
     727static mrb_value
     728mrb_win32_basicsocket_sysread(mrb_state *mrb, mrb_value self)
     729{
     730  int sd, ret;
     731  mrb_value buf = mrb_nil_value();
     732  mrb_int maxlen;
     733
     734  mrb_get_args(mrb, "i|S", &maxlen, &buf);
     735  if (maxlen < 0) {
     736    return mrb_nil_value();
     737  }
     738
     739  if (mrb_nil_p(buf)) {
     740    buf = mrb_str_new(mrb, NULL, maxlen);
     741  }
     742  if (RSTRING_LEN(buf) != maxlen) {
     743    buf = mrb_str_resize(mrb, buf, maxlen);
     744  }
     745
     746  sd = socket_fd(mrb, self);
     747  ret = recv(sd, RSTRING_PTR(buf), maxlen, 0);
     748
     749  switch (ret) {
     750    case 0: /* EOF */
     751      if (maxlen == 0) {
     752        buf = mrb_str_new_cstr(mrb, "");
     753      } else {
     754        mrb_raise(mrb, E_EOF_ERROR, "sysread failed: End of File");
     755      }
     756      break;
     757    case SOCKET_ERROR: /* Error */
     758      mrb_sys_fail(mrb, "recv");
     759      break;
     760    default:
     761      if (RSTRING_LEN(buf) != ret) {
     762        buf = mrb_str_resize(mrb, buf, ret);
     763      }
     764      break;
     765  }
     766
     767  return buf;
     768}
     769
     770static mrb_value
     771mrb_win32_basicsocket_sysseek(mrb_state *mrb, mrb_value self)
     772{
     773  mrb_raise(mrb, E_NOTIMP_ERROR, "sysseek not implemented for windows sockets");
     774  return mrb_nil_value();
     775}
     776
     777static mrb_value
     778mrb_win32_basicsocket_syswrite(mrb_state *mrb, mrb_value self)
     779{
     780  int n;
     781  SOCKET sd;
     782  mrb_value str;
     783
     784  sd = socket_fd(mrb, self);
     785  mrb_get_args(mrb, "S", &str);
     786  n = send(sd, RSTRING_PTR(str), RSTRING_LEN(str), 0);
     787  if (n == SOCKET_ERROR)
     788    mrb_sys_fail(mrb, "send");
     789  return mrb_fixnum_value(n);
     790}
     791
     792#endif
    688793
    689794void
     
    693798  struct RClass *constants;
    694799
     800#ifdef _WIN32
     801  WSADATA wsaData;
     802  int result;
     803  result = WSAStartup(MAKEWORD(2,2), &wsaData);
     804  if (result != NO_ERROR)
     805    mrb_raise(mrb, E_RUNTIME_ERROR, "WSAStartup failed");
     806#else
    695807  struct RClass *usock;
     808#endif
    696809
    697810  ai = mrb_define_class(mrb, "Addrinfo", mrb->object_class);
     
    699812  mrb_define_class_method(mrb, ai, "getaddrinfo", mrb_addrinfo_getaddrinfo, MRB_ARGS_REQ(2)|MRB_ARGS_OPT(4));
    700813  mrb_define_method(mrb, ai, "getnameinfo", mrb_addrinfo_getnameinfo, MRB_ARGS_OPT(1));
     814#ifndef _WIN32
    701815  mrb_define_method(mrb, ai, "unix_path", mrb_addrinfo_unix_path, MRB_ARGS_NONE());
     816#endif
    702817
    703818  io = mrb_class_get(mrb, "IO");
     
    746861  //mrb_define_method(mrb, sock, "sysaccept", mrb_socket_accept, MRB_ARGS_NONE());
    747862
     863#ifndef _WIN32
    748864  usock = mrb_define_class(mrb, "UNIXSocket", bsock);
     865#endif
    749866  //mrb_define_class_method(mrb, usock, "pair", mrb_unixsocket_open, MRB_ARGS_OPT(2));
    750867  //mrb_define_class_method(mrb, usock, "socketpair", mrb_unixsocket_open, MRB_ARGS_OPT(2));
     
    755872
    756873  /* Windows IO Method Overrides on BasicSocket */
     874#ifdef _WIN32
     875  mrb_define_method(mrb, bsock, "close", mrb_win32_basicsocket_close, MRB_ARGS_NONE());
     876  mrb_define_method(mrb, bsock, "sysread", mrb_win32_basicsocket_sysread, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
     877  mrb_define_method(mrb, bsock, "sysseek", mrb_win32_basicsocket_sysseek, MRB_ARGS_REQ(1));
     878  mrb_define_method(mrb, bsock, "syswrite", mrb_win32_basicsocket_syswrite, MRB_ARGS_REQ(1));
     879#endif
    757880
    758881  constants = mrb_define_module_under(mrb, sock, "Constants");
     
    774897    freeaddrinfo(mrb_cptr(ai));
    775898  }
    776 }
     899#ifdef _WIN32
     900  WSACleanup();
     901#endif
     902}
Note: See TracChangeset for help on using the changeset viewer.