-/* File: inet.c */
+/* File: inet.c */
#include "angband.h"
#include <stdlib.h>
-static char *errstr;
+static cptr errstr;
static char *proxy;
static int proxy_port;
static EndpointRef ep = kOTInvalidEndpointRef;
#endif
-#if 0 /* ¤È¤ê¤¢¤¨¤º¸½ºß¤Ï»È¤ï¤Ê¤¤¡£by Habu*/
+#if 0 /* とりあえず現在は使わない。by Habu*/
static char *homeurl;
void
#endif /* if 0 */
-/* ¥×¥í¥¥·¥µ¡¼¥Ð¤Î¥¢¥É¥ì¥¹¤ò¤ò¥Õ¥¡¥¤¥ë¤«¤éÆɤó¤ÇÀßÄꤹ¤ë */
-static void set_proxy()
+/* プロキシサーバのアドレスををファイルから読んで設定する */
+void set_proxy(char *default_url, int default_port)
{
char buf[1024];
size_t len;
char tmp[8];
#endif
- path_build(buf, 1024, ANGBAND_DIR_PREF, "proxy.prf");
+ path_build(buf, sizeof(buf), ANGBAND_DIR_PREF, "proxy.prf");
- /* ¥Õ¥¡¥¤¥ë¤«¤éÀßÄê¤òÆɤࡣ*/
+ /* ファイルから設定を読む。 */
fp = my_fopen(buf, "r");
if (!fp)
{
- /* ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ïdefine.hÆâ¤Î¥Ç¥Õ¥©¥ë¥È¤òÀßÄê */
- proxy = HTTP_PROXY;
- proxy_port = HTTP_PROXY_PORT;
+ /* ファイルが存在しない場合はデフォルトを設定 */
+ proxy = default_url;
+ proxy_port = default_port;
return;
}
- while (my_fgets(fp, buf, 1024)==0)
+ while (my_fgets(fp, buf, sizeof(buf))==0)
{
if (buf[0] != '#' && buf[0] != '\0') break;
}
my_fclose(fp);
- /* ¥Ý¥¤¥ó¥¿¤òÍÑ°Õ¡£*/
+ /* ポインタを用意。 */
s = buf;
- /* "http://" ¤«¤é»Ï¤Þ¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤ÎÉôʬ¤ò¥«¥Ã¥È¤¹¤ë¡£*/
+ /* "http://" から始まっている場合はその部分をカットする。 */
#if defined(WINDOWS)
if (!strnicmp(s, "http://", 7))
{
}
#endif
- /* ʸ»úÎó¤ÎŤµ¤òÄ´¤Ù¡¢É¬Íפʥá¥â¥ê¤ò³ÎÊÝ */
+ /* 文字列の長さを調べ、必要なメモリを確保 */
len = strlen(s);
proxy = malloc(len + 1);
- /* ¥Ý¡¼¥ÈÈֹ椬¤¢¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¡¢¤¢¤ì¤Ðproxy_port¤ËÀßÄê¡£*/
+ /* ポート番号があるかどうかを調べ、あればproxy_portに設定。 */
--len;
- while (len > 0 && isdigit(s[len]))
+ while (len > 0 && isdigit((unsigned char)s[len]))
--len;
if (len > 0 && s[len] == ':' && s[len + 1] != '\0')
{
else
{
strcpy(proxy, s);
- proxy_port = HTTP_PROXY_PORT;
+ proxy_port = default_port;
}
- /* ¥×¥í¥¥·¤Î¥¢¥É¥ì¥¹¤òproxy¤Ë¥³¥Ô¡¼ */
+ /* ã\83\97ã\83ã\82ã\82·ã\81®ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92proxyã\81«ã\82³ã\83\94ã\83¼ */
strcpy(proxy, s);
if (proxy_port == 0)
proxy_port = 80;
}
-/* ¥½¥±¥Ã¥È¤Ë¥Ð¥Ã¥Õ¥¡¤ÎÆâÍƤò½ñ¤¹þ¤à */
+/* ソケットにバッファの内容を書き込む */
int soc_write(int sd, char *buf, size_t sz)
{
#ifndef MACINTOSH
-#ifndef WINDOWS
- write(sd, buf, sz);
-#else
int nleft, nwritten;
-
+
nleft = sz;
while (nleft > 0) {
nleft -= nwritten;
buf += nwritten;
}
-#endif
#else /* !MACINTOSH */
OTResult bytesSent;
return sz;
}
-#if 0 /* ¤ª¤½¤é¤¯»È¤ï¤Ê¤¤ */
+int soc_read(int sd, char *buf, size_t sz)
+{
+#ifndef MACINTOSH
+ int nleft, nread = 0;
+
+ nleft = sz;
+
+ while (nleft > 0) {
+ int n;
+ n = recv(sd, buf + nread, nleft, 0);
+ if (n <= 0)
+ return (nread);
+ nleft -= n;
+ nread += n;
+ }
+#else /* !MACINTOSH */
+
+ OTResult bytesSent;
+
+ OTSnd(ep, (void *)buf, sz, 0);
+
+#endif
+ return nread;
+}
+
+#if 0 /* おそらく使わない */
int soc_write_str(int sd, char *buf)
{
return soc_write(sd, buf, strlen(buf));
#endif
#if !defined(WINDOWS) && !defined(MACINTOSH)
-static jmp_buf env;
+static sigjmp_buf env;
static void (*sig_int_saved)(int);
static void (*sig_alm_saved)(int);
#endif
-static void restore_signal()
+static void restore_signal(void)
{
#if !defined(WINDOWS) && !defined(MACINTOSH)
struct itimerval val0;
- /* itimer¥ê¥»¥Ã¥ÈÍÑ */
+ /* itimerリセット用 */
val0.it_interval.tv_sec = 0;
val0.it_interval.tv_usec = 0;
val0.it_value.tv_sec = 0;
val0.it_value.tv_usec = 0;
- /* ¥¢¥é¡¼¥à²ò½ü */
+ /* アラーム解除 */
setitimer(ITIMER_REAL, &val0, NULL);
signal(SIGALRM, sig_alm_saved);
signal(SIGINT, sig_int_saved);
#endif
+/* サーバにコネクトする関数。 */
+int connect_server(int timeout, const char *host, int port)
#ifndef MACINTOSH
-/* ¥µ¡¼¥Ð¤Ë¥³¥Í¥¯¥È¤¹¤ë´Ø¿ô¡£ Win, unix */
-static int connect_server(int timeout, const char *host, int port)
{
int sd;
struct sockaddr_in to;
struct itimerval val;
int ret;
- /* itimerÀßÄêÍÑ */
+ /* itimer設定用 */
val.it_interval.tv_sec = 0;
val.it_interval.tv_usec = 0;
val.it_value.tv_sec = timeout;
val.it_value.tv_usec = 0;
- /* ¥¿¥¤¥à¥¢¥¦¥È¡¢¤â¤·¤¯¤ÏÃæÃǤ·¤¿»þ¤Î½èÍý¡£*/
+ /* タイムアウト、もしくは中断した時の処理。 */
if ((ret = sigsetjmp(env,1)) != 0)
{
#ifdef JP
if (ret == SIGALRM)
- errstr = "¥¨¥é¡¼: ¥¿¥¤¥à¥¢¥¦¥È";
+ errstr = "エラー: タイムアウト";
else
- errstr = "¥¨¥é¡¼: ¥¤¥ó¥¿¥é¥×¥È";
+ errstr = "エラー: インタラプト";
#else
if (ret == SIGALRM)
errstr = "Error : time out";
}
sig_int_saved = signal(SIGINT, interrupt_report);
sig_alm_saved = signal(SIGALRM, interrupt_report);
-
- /* ¥¿¥¤¥à¥¢¥¦¥È¤Î»þ´Ö¤òÀßÄê */
+
+ /* タイムアウトの時間を設定 */
setitimer(ITIMER_REAL, &val, NULL);
+#else
+ /* Unused in Windows */
+ (void)timeout;
#endif
- /* ¥×¥í¥¥·¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ì¤Ð¥×¥í¥¥·¤Ë·Ò¤° */
+ /* プロキシが設定されていればプロキシに繋ぐ */
if (proxy && proxy[0])
{
if ((hp = gethostbyname(proxy)) == NULL)
{
#ifdef JP
- errstr = "¥¨¥é¡¼: ¥×¥í¥¥·¤Î¥¢¥É¥ì¥¹¤¬ÉÔÀµ¤Ç¤¹";
+ errstr = "エラー: プロキシのアドレスが不正です";
#else
errstr = "Error : wrong proxy addres";
#endif
else if ((hp = gethostbyname(host)) == NULL)
{
#ifdef JP
- errstr = "¥¨¥é¡¼: ¥µ¡¼¥Ð¤Î¥¢¥É¥ì¥¹¤¬ÉÔÀµ¤Ç¤¹";
+ errstr = "エラー: サーバのアドレスが不正です";
#else
errstr = "Error : wrong server adress";
#endif
to.sin_family = AF_INET;
if(proxy && proxy[0] && proxy_port)
- to.sin_port = htons(proxy_port);
+ to.sin_port = htons((unsigned short int)proxy_port);
else
- to.sin_port = htons(port);
+ to.sin_port = htons((unsigned short int)port);
#ifndef WINDOWS
if ((sd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
- {
-#ifdef JP
- errstr = "¥¨¥é¡¼: ¥½¥±¥Ã¥È¤òÀ¸À®¤Ç¤¤Þ¤»¤ó";
-#else
- errstr = "Error : cannot create socket.";
-#endif
- restore_signal();
- return -1;
- }
#else
if ((sd = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
+#endif
{
#ifdef JP
- errstr = "¥¨¥é¡¼: ¥½¥±¥Ã¥È¤òÀ¸À®¤Ç¤¤Þ¤»¤ó";
+ errstr = "エラー: ソケットを生成できません";
#else
errstr = "Error : cannot create socket.";
#endif
restore_signal();
return -1;
}
-#endif
if (connect(sd, (struct sockaddr *)&to, sizeof(to)) < 0)
{
#ifdef JP
- errstr = "¥¨¥é¡¼: ¥µ¡¼¥Ð¤ËÀܳ¤Ç¤¤Þ¤»¤ó";
+ errstr = "エラー: サーバに接続できません";
#else
errstr = "Error : failed to connect server";
#endif
#else /* !MACINTOSH */
-/* ¥µ¡¼¥Ð¤Ë¥³¥Í¥¯¥È¤¹¤ë´Ø¿ô¡£ Mac */
-static int connect_server(int timeout, const char *host, int port)
+ /* サーバにコネクトする関数。 Mac */
{
OSStatus err;
InetHostInfo response;
sndCall.addr.len = sizeof(InetAddress);
sndCall.addr.buf = (unsigned char*) &inAddr;
- sndCall.opt.buf = nil; // no connection options
+ sndCall.opt.buf = nil; /* no connection options */
sndCall.opt.len = 0;
- sndCall.udata.buf = nil; // no connection data
+ sndCall.udata.buf = nil; /* no connection data */
sndCall.udata.len = 0;
- sndCall.sequence = 0; // ignored by OTConnect
+ sndCall.sequence = 0; /* ignored by OTConnect */
err = OTConnect(ep, &sndCall, NULL);
}
#endif
-int connect_scoreserver(void)
-{
- /* ¥×¥í¥¥·¤òÀßÄꤹ¤ë */
- set_proxy();
-
- return connect_server(HTTP_TIMEOUT, SCORE_SERVER, SCORE_PORT);
-}
int disconnect_server(int sd)
{
#endif
}
-char *
-soc_err()
+cptr soc_err()
{
return errstr;
}