Epiphanic Networks' Wikka : AthemeMemoServ

Home :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register

MemoServ Module

Last edited by KogAdmin:
line 400
Tue, 11 Oct 2005 05:11 PDT [diff]

MemoServ component I wrote for Atheme. I was using the SVN current from the main trunk (Atheme 0.3beta3 [20051003-2531] #16 version tells me).

General Setup
1 Create directories in help and modules

2 update include/services.h

/* optional services */
struct memosvs
{
  char   *nick;
  char   *user;
  char   *host;
  char   *real;
  char   *disp;
 
  service_t *me;
} memosvs;

// later on...


3 Added the following to include/account.h
/* struct for account memos */
struct mymemo_ {
    char     sender[NICKLEN];
    char     text[MEMOLEN];
    time_t   sent;
    uint32_t status;
    list_t   metadata;
    uint8_t  newcount;
};

/* memo status flags */
#define MEMO_NEW           0x00000000
#define MEMO_READ          0x00000001


4 edit src/conf.c to read new conf entries

//line 27 -- definition of sig
static int c_memoserv(CONFIGENTRY *);

//line 82 -- definition of sig
/* MemoServ client information. */
static int c_ms_nick(CONFIGENTRY *);
static int c_ms_user(CONFIGENTRY *);
static int c_ms_host(CONFIGENTRY *);
static int c_ms_real(CONFIGENTRY *);

//line 140 -- table to store conf data in
list_t conf_ms_table;

//line 392 -- add a conf block
add_top_conf("MEMOSERV", c_memoserv);

//line 400 -- add top block of conf item
add_top_conf("MEMOSERV", c_memoserv);

//line 458 -- conf items for parsing
    /* memoserv{} block */
    add_conf_item("NICK", &conf_ms_table, c_ms_nick);
    add_conf_item("USER", &conf_ms_table, c_ms_user);
    add_conf_item("HOST", &conf_ms_table, c_ms_host);
    add_conf_item("REAL", &conf_ms_table, c_ms_real);
   
//line 518 -- adds a hook, tells it to read memoserv{} and give it to subblock handler, writing to conf_ms_table
static int c_memoserv(CONFIGENTRY *ce)
{
    subblock_handler(ce, &conf_ms_table);
    return 0;
}

//line 1141 -- these grab the actual conf values
static int c_ms_nick(CONFIGENTRY *ce)
{
    if (ce->ce_vardata == NULL)
        PARAM_ERROR(ce);

    memosvs.nick = sstrdup(ce->ce_vardata);

    return 0;
}

static int c_ms_user(CONFIGENTRY *ce)
{
    if (ce->ce_vardata == NULL)
        PARAM_ERROR(ce);

    memosvs.user = sstrdup(ce->ce_vardata);

    return 0;
}

static int c_ms_host(CONFIGENTRY *ce)
{
    if (ce->ce_vardata == NULL)
        PARAM_ERROR(ce);

    memosvs.host = sstrdup(ce->ce_vardata);

    return 0;
}

static int c_ms_real(CONFIGENTRY *ce)
{
    if (ce->ce_vardata == NULL)
        PARAM_ERROR(ce);

    memosvs.real = sstrdup(ce->ce_vardata);

    return 0;
}


5 Update modules/Makefile.in

changed SUBDIRS
SUBDIRS = chanserv nickserv global operserv userserv xmlrpc memoserv


This will tell it to recurse into memoserv dir

6 add to /configure.ac

modules/memoserv/Makefile \


This will tell it to compile based on the makefile in the dir, generated by the configure

7 Run autoconf
(or autoconf2xx as the case may be). This builds ./configure file

8 run /.configure

this will build make files

Module Specific
1 Build make files in /modules/memoserv
2 Write a main.c
3 Added a list_t to includes/account.h to store memos, memo struct in account.h (while putting constant in includes/common.h)
4 Write other functions - send.c, read.c, list.c, forward.c, delete.c
5 Build help.c file w/ hookins
6 Build help structure
7 Recompile
8 Add loadmodules to atheme.conf

NOTE: your services will NOT join a channel unless it's either explicitly told to (join on config_options.chan) OR you start the services with that services agent!
 


HINT: I ended up using make distclean && ./configure && make && make install a lot... Comes in handy, especially when things become strange; shutdown services and run that line and usually things just dissapear
 



CategoryAtheme

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.0898 seconds