src/lua_irc.c
author Tero Marttila <terom@fixme.fi>
Mon, 04 May 2009 20:55:04 +0300
branchnew-transport
changeset 168 a58ad50911fc
parent 145 a5582e1a83da
child 180 22967b165692
permissions -rw-r--r--
refactor test.c into tests/*
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "lua_irc.h"
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
     2
#include "lua_func.h"
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <stdlib.h>
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <string.h>
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
     7
static struct lua_type lua_chan_type = LUA_TYPE("evirc.chan");
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
     8
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 * Create a lua_chan userdata from the given irc_chan and leave it on the stack, returning 1
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
 */
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
static int lua_chan_create (lua_State *L, struct irc_chan *chan)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
{
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    // create the new obj
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    15
    struct lua_chan *lua_chan = lua_type_create(L, &lua_chan_type, sizeof(*lua_chan));
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    // initialize
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    lua_chan->chan = chan;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    // ok
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    return 1;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
 * Return the channel name as a lua string
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    27
static struct lua_func lua_chan__tostring_func = LUA_FUNC(&lua_chan_type, "__tostring",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    28
        "format using channel name",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    29
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    30
        LUA_FUNC_ARG_END
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    31
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    32
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    33
static int lua_chan__tostring (lua_State *L)
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    35
    struct lua_chan *lua_chan;
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    36
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    37
    lua_args_parse(L, &lua_chan__tostring_func, (void *) &lua_chan);
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    lua_pushfstring(L, "<irc_chan %s>", irc_chan_name(lua_chan->chan));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    return 1;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
 * Send a PRIVMSG to the channel
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    47
static struct lua_func lua_chan_say_func = LUA_FUNC(&lua_chan_type, "evirc.chan.say",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    48
        "send a message to a channel",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    49
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    50
        LUA_FUNC_ARG_STRING("message",      LUA_ARG_STRING_REQUIRED )
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    51
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    52
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
static int lua_chan_say (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    55
    struct lua_chan *lua_chan;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    err_t err;
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    57
    const char *message;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    59
    // parse args
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    60
    lua_args_parse(L, &lua_chan_say_func, (void *) &lua_chan,
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    61
            &message
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    62
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    // send
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    if ((err = irc_chan_PRIVMSG(lua_chan->chan, message)))
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        return luaL_error(L, "irc_chan_PRIVMSG: '%s': %s", message, error_name(err));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    // ok
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    return 0;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    72
static struct lua_method lua_chan_methods[] = LUA_METHODS(
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    73
        LUA_METHOD("__tostring",    lua_chan__tostring, &lua_chan__tostring_func    ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    74
        LUA_METHOD("say",           lua_chan_say,       &lua_chan_say_func          )
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    75
    );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    77
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    78
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    79
static struct lua_type lua_net_type = LUA_TYPE("evirc.net");
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
 * Create a lua_net userdata from the given irc_net and push it onto the stack, returning 1.
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
 */
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
static int lua_net_create (lua_State *L, struct irc_net *net)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
{
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    // create the new obj
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    87
    struct lua_net *lua_net = lua_type_create(L, &lua_net_type, sizeof(*lua_net));
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    // initialize
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
    lua_net->net = net;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    // ok
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    return 1;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
 * Return the network name as a lua string
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
    99
static struct lua_func lua_net__tostring_func = LUA_FUNC(&lua_net_type, "__tostring",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   100
        "format using network name",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   101
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   102
        LUA_FUNC_ARG_END
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   103
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   104
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   105
static int lua_net__tostring (lua_State *L)
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   107
    struct lua_net *lua_net;
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   108
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   109
    lua_args_parse(L, &lua_net__tostring_func, (void *) &lua_net);
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    lua_pushfstring(L, "<irc_net %s>", irc_net_name(lua_net->net));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    return 1;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
 * Join a new channel, returning the lua_chan
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   119
static struct lua_func lua_net_join_func = LUA_FUNC(&lua_net_type, "join",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   120
        "create a new channel and join it",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   121
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   122
        LUA_FUNC_ARG_STRING("channel",      LUA_ARG_STRING_REQUIRED)
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   123
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   124
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   125
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
static int lua_net_join (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   128
    struct lua_net *lua_net;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    struct irc_chan_info chan_info;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    struct irc_chan *chan;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    struct error_info err;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    // the channel name
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   134
    lua_args_parse(L, &lua_net_join_func, (void *) &lua_net,
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   135
            &chan_info.channel
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   136
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
    // add it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    if (irc_net_add_chan(lua_net->net, &chan, &chan_info, &err))
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        return luaL_error(L, "irc_net_add_chan: %s: %s", chan_info.channel, error_msg(&err));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    // return it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    return lua_chan_create(L, chan);    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
/**
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
 * Look up a channel by name, returning the lua_chan
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
 */
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   149
static struct lua_func lua_net_get_chan_func = LUA_FUNC(&lua_net_type, "channel",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   150
        "look up a channel by name",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   151
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   152
        LUA_FUNC_ARG_STRING("channel",      LUA_ARG_STRING_REQUIRED)
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   153
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   154
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
static int lua_net_get_chan (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   157
    struct lua_net *lua_net;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
    struct irc_chan *chan;
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   159
    const char *channel;
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   160
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   161
    // parse args
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   162
    lua_args_parse(L, &lua_net_get_chan_func, (void *) &lua_net,
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   163
            &channel
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   164
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    // lookup the irc_chan
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    if ((chan = irc_net_get_chan(lua_net->net, channel)) == NULL)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        return luaL_error(L, "irc_net_get_chan: no such channel: %s", channel);
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    // wrap it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
    return lua_chan_create(L, chan);
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   174
static struct lua_method lua_net_methods[] = LUA_METHODS(
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   175
        LUA_METHOD("__tostring",    lua_net__tostring,  &lua_net__tostring_func ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   176
        LUA_METHOD("join",          lua_net_join,       &lua_net_join_func      ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   177
        LUA_METHOD("channel",       lua_net_get_chan,   &lua_net_get_chan_func  )
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   178
    );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   181
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   182
static struct lua_type lua_client_type = LUA_TYPE("evirc.client");
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   183
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   184
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   185
static struct lua_func lua_client_set_defaults_func = LUA_FUNC(&lua_client_type, "set_defaults", 
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   186
        "set the default settings to use for evirc.client.connect",
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   187
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   188
        LUA_FUNC_ARG_STRING("nickname",     LUA_ARG_STRING_REQUIRED ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   189
        LUA_FUNC_ARG_STRING("username",     LUA_ARG_STRING_REQUIRED ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   190
        LUA_FUNC_ARG_STRING("realname",     LUA_ARG_STRING_REQUIRED ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   191
        LUA_FUNC_ARG_STRING("service",      IRC_PORT                ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   192
        LUA_FUNC_ARG_STRING("service_ssl",  IRC_SSL_PORT            )
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   193
    );
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   194
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
static int lua_client_set_defaults (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
{
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   197
    struct lua_client *lua_client;
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   198
    const char *nickname, *username, *realname, *service, *service_ssl;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   200
    // parse args
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   201
    lua_args_parse(L, &lua_client_set_defaults_func, (void *) &lua_client,
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   202
            &nickname, &username, &realname, &service, &service_ssl
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   203
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   205
    // set
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   206
    struct irc_client_defaults defaults = {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   207
        .register_info = {
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   208
            .nickname   = nickname,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   209
            .username   = username,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   210
            .realname   = realname
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   211
        },
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   212
        .service        = service,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   213
        .service_ssl    = service_ssl
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   214
    };
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
    // invoke
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   217
    // XXX: needs to be copied
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   218
    irc_client_set_defaults(lua_client->client, &defaults);
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    // ok
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    return 0;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   224
static struct lua_func lua_client_connect_func = LUA_FUNC(&lua_client_type, "connect",
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   225
        "Create and return a new IRC network",
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   226
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   227
        LUA_FUNC_ARG_STRING("network",      LUA_ARG_STRING_REQUIRED ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   228
        LUA_FUNC_ARG_STRING("hostname",     LUA_ARG_STRING_REQUIRED ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   229
        LUA_FUNC_ARG_STRING("service",      NULL                    ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   230
        LUA_FUNC_ARG_BOOL(  "ssl",          false                   ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   231
        LUA_FUNC_ARG_STRING("ssl_cafile",   NULL                    ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   232
        LUA_FUNC_ARG_BOOL(  "ssl_verify",   false                   ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   233
        LUA_FUNC_ARG_STRING("ssl_cert",     NULL                    ),
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   234
        LUA_FUNC_ARG_STRING("ssl_pkey",     NULL                    )
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   235
);
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   236
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
static int lua_client_connect (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
{
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   239
    struct lua_client *lua_client;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
    struct irc_net_info net_info;
141
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   241
    const char *ssl_cafile = NULL, *ssl_cert = NULL, *ssl_pkey = NULL;
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   242
    bool use_ssl = false, ssl_verify = false;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
    struct irc_net *net;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
    struct error_info err;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
    // init net_info
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
    memset(&net_info, 0, sizeof(net_info));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
143
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   249
    // parse args
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   250
    lua_args_parse(L, &lua_client_connect_func, (void *) &lua_client,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   251
        &net_info.network, &net_info.hostname, &net_info.service,
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   252
        &use_ssl, &ssl_cafile, &ssl_verify, &ssl_cert, &ssl_pkey
1edab39c88a8 implement lua_args_parse
Tero Marttila <terom@fixme.fi>
parents: 142
diff changeset
   253
    );
141
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   254
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   255
    // SSL?
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   256
    if (use_ssl || ssl_cafile || ssl_verify || ssl_cert || ssl_pkey) {
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   257
        // verify
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   258
        if ((ssl_cert || ssl_pkey) && !(ssl_cert && ssl_pkey))
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   259
            return luaL_error(L, "must give both ssl_cert and ssl_pkey");
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   260
        
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   261
        // create
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   262
        if (sock_ssl_client_cred_create(&net_info.ssl_cred, ssl_cafile, ssl_verify, ssl_cert, ssl_pkey, &err))
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   263
            return luaL_error(L, "sock_ssl_client_cred_create(ssl_cafile=%s, ssl_verify=%b, ssl_cert=%s, ssl_pkey=%s): %s", 
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   264
                    ssl_cafile, ssl_verify, ssl_cert, ssl_pkey, error_msg(&err)
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   265
                );
0b850238c588 implement SSL stuff for lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   266
    }
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
    // create it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
    if (irc_client_add_net(lua_client->client, &net, &net_info, &err))
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
        return luaL_error(L, "irc_client_add_net: %s/%s: %s", net_info.network, net_info.hostname, error_msg(&err));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
    // wrap it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
    return lua_net_create(L, net);
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   276
static struct lua_func lua_client_get_network_func = LUA_FUNC(&lua_client_type, "network",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   277
        "Lookup an existing network by name",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   278
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   279
        LUA_FUNC_ARG_STRING("network",  LUA_ARG_STRING_REQUIRED)
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   280
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   281
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
static int lua_client_get_network (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   284
    struct lua_client *lua_client;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
    struct irc_net *net;
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   286
    const char *network;
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   287
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   288
    // parse args
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   289
    lua_args_parse(L, &lua_client_get_network_func, (void *) &lua_client,
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   290
            &network
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   291
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
    
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
    // lookup the irc_net
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
    if ((net = irc_client_get_net(lua_client->client, network)) == NULL)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
        return luaL_error(L, "irc_client_get_net: no such network: %s", network);
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
    // wrap it
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
    return lua_net_create(L, net);
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   301
static struct lua_func lua_client_quit_func = LUA_FUNC(&lua_client_type, "quit",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   302
        "Disconnect from all networks",
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   303
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   304
        LUA_FUNC_ARG_STRING("message",  "Bye")
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   305
    );
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   306
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
static int lua_client_quit (lua_State *L)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   309
    struct lua_client *lua_client;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
    err_t err;
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   311
    const char *message;
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   312
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   313
    // parse args
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   314
    lua_args_parse(L, &lua_client_quit_func, (void *) &lua_client,
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   315
            &message
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   316
        );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
    // execute
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
    if ((err = irc_client_quit(lua_client->client, message)))
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
        return luaL_error(L, "irc_client_quit: %s", error_name(err));
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
    // ok
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
    return 0;
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   326
static struct lua_method lua_client_methods[] = LUA_METHODS(
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   327
        LUA_METHOD("set_defaults",  lua_client_set_defaults,    &lua_client_set_defaults_func   ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   328
        LUA_METHOD("connect",       lua_client_connect,         &lua_client_connect_func        ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   329
        LUA_METHOD("network",       lua_client_get_network,     &lua_client_get_network_func    ),
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   330
        LUA_METHOD("quit",          lua_client_quit,            &lua_client_quit_func           )
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   331
    );
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
void lua_irc_init (struct nexus_lua *lua)
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
{
145
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   335
    // register types
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   336
    lua_type_register(lua->st, &lua_chan_type, lua_chan_methods);
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   337
    lua_type_register(lua->st, &lua_net_type, lua_net_methods);
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   338
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   339
    // register the global "client" object
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   340
    struct lua_client *lua_client = lua_type_register_global(lua->st, &lua_client_type, lua_client_methods, "client", sizeof(*lua_client));
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   341
    
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   342
    // initialize it
a5582e1a83da implement lua_type
Tero Marttila <terom@fixme.fi>
parents: 143
diff changeset
   343
    lua_client->client = lua->nexus->client;
116
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
}
92e71129074d split off lua_irc from lua_objs
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345