<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.darenet.org/skins/common/feed.css?12"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>ircu api - jupe - Revision history</title>
		<link>http://wiki.darenet.org/index.php?title=ircu_api_-_jupe&amp;action=history</link>
		<description>Revision history for this page on the wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.1</generator>
		<lastBuildDate>Wed, 03 Jun 2026 09:46:00 GMT</lastBuildDate>
		<item>
			<title>Secretagent at 04:03, 25 April 2008</title>
			<link>http://wiki.darenet.org/index.php?title=ircu_api_-_jupe&amp;diff=2273&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

		&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;col class='diff-marker' /&gt;
		&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:03, 25 April 2008&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 161:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 161:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/changelog&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/changelog&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Catgeory&lt;/del&gt;:IRCu API|Jupe]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Category&lt;/ins&gt;:IRCu API|Jupe]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff generator: internal 2026-06-03 09:45:37 --&gt;

&lt;!-- diff cache key wiki:diff:version:1.11a:oldid:2272:newid:2273 --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 25 Apr 2008 04:03:45 GMT</pubDate>			<dc:creator>Secretagent</dc:creator>			<comments>http://wiki.darenet.org/Talk:ircu_api_-_jupe</comments>		</item>
		<item>
			<title>Secretagent:&amp;#32;New page: &lt;pre&gt;Occasionally, a server will become incorrectly configured or will start behaving incorrectly.  Even more rarely, a server will be compromised, and a modified version of the server put...</title>
			<link>http://wiki.darenet.org/index.php?title=ircu_api_-_jupe&amp;diff=2272&amp;oldid=prev</link>
			<description>&lt;p&gt;New page: &amp;lt;pre&amp;gt;Occasionally, a server will become incorrectly configured or will start behaving incorrectly.  Even more rarely, a server will be compromised, and a modified version of the server put...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;Occasionally, a server will become incorrectly configured or will&lt;br /&gt;
start behaving incorrectly.  Even more rarely, a server will be&lt;br /&gt;
compromised, and a modified version of the server put in place to&lt;br /&gt;
cause problems.  These cases are the reason for the _jupe_, a&lt;br /&gt;
temporary server ban.  This is similar to the G-line, which is a&lt;br /&gt;
temporary user ban, and indeed, the jupe API is very similar to the&lt;br /&gt;
G-line API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;macro&amp;gt;&lt;br /&gt;
#define JUPE_MAX_EXPIRE	604800	/* max expire: 7 days */&lt;br /&gt;
&lt;br /&gt;
This macro lists the maximum expire time a jupe is permitted to have.&lt;br /&gt;
This value is limited to 7 days to prevent abuse of the system.&lt;br /&gt;
&amp;lt;/macro&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;macro&amp;gt;&lt;br /&gt;
#define JUPE_ACTIVE	0x0001&lt;br /&gt;
&lt;br /&gt;
This flag is used to indicate that a given jupe is globally active.&lt;br /&gt;
&amp;lt;/macro&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;macro&amp;gt;&lt;br /&gt;
#define JUPE_LOCAL	0x0002&lt;br /&gt;
&lt;br /&gt;
This flag is used to indicate that a given jupe is a local one.  Local&lt;br /&gt;
jupes do not affect users on other servers.&lt;br /&gt;
&amp;lt;/macro&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;macro&amp;gt;&lt;br /&gt;
#define JUPE_LDEACT	0x0004	/* locally deactivated */&lt;br /&gt;
&lt;br /&gt;
This flag is set on global jupes that have been locally deactivated.&lt;br /&gt;
This flag is maintained internally by the jupe subsystem.&lt;br /&gt;
&amp;lt;/macro&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;struct&amp;gt;&lt;br /&gt;
struct Jupe;&lt;br /&gt;
&lt;br /&gt;
The struct Jupe describes everything about a given jupe.  None of its&lt;br /&gt;
fields may be directly accessed by the application; use the functions&lt;br /&gt;
and macros described below instead.&lt;br /&gt;
&amp;lt;/struct&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int JupeIsActive(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
This macro returns a non-zero value if the jupe is active, or 0&lt;br /&gt;
otherwise.  If a jupe is locally deactivated, this macro will always&lt;br /&gt;
return 0.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int JupeIsRemActive(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
This macro returns a non-zero value if the jupe is active, ignoring&lt;br /&gt;
whether or not it is locally deactivated.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int JupeIsLocal(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
This macro returns a non-zero value if the jupe is local only.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
char* JupeServer(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
This macro returns the server name associated with the jupe.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
char* JupeReason(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
This macro returns the reason that was given when the jupe was set.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
time_t JupeLastMod(struct Jupe* j);&lt;br /&gt;
&lt;br /&gt;
Jupes have a modification time that must be monotonically increasing.&lt;br /&gt;
This macro simply returns that modification time.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int jupe_add(struct Client *cptr, struct Client *sptr, char *server,&lt;br /&gt;
	     char *reason, time_t expire, time_t lastmod, unsigned int flags);&lt;br /&gt;
&lt;br /&gt;
This function simply adds a jupe, set by _sptr_ and with a _server_,&lt;br /&gt;
_reason_, _expire_, and _lastmod_ as specified.  The _flags_ parameter&lt;br /&gt;
is a bit mask consisting of the binary OR of JUPE_LOCAL and&lt;br /&gt;
JUPE_ACTIVE, as appropriate.  The jupe_add() function will propagate&lt;br /&gt;
the jupe to all servers (assuming JUPE_LOCAL was not passed), and will&lt;br /&gt;
break its link to the server specified by _server_ (assuming that the&lt;br /&gt;
JUPE_ACTIVE flag _was_ passed).&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int jupe_activate(struct Client *cptr, struct Client *sptr, struct Jupe *jupe,&lt;br /&gt;
		  time_t lastmod, unsigned int flags);&lt;br /&gt;
&lt;br /&gt;
This function activates the jupe specified by _jupe_, setting its&lt;br /&gt;
_lastmod_ time as specified.  If _flags_ is JUPE_LOCAL and if the jupe&lt;br /&gt;
is locally deactivated, this function will turn off the local&lt;br /&gt;
deactivation flag, but will not modify _lastmod_.  If the jupe is&lt;br /&gt;
globally deactivated, passing this function the JUPE_LOCAL flag will&lt;br /&gt;
have no effect.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int jupe_deactivate(struct Client *cptr, struct Client *sptr,&lt;br /&gt;
		    struct Jupe *jupe, time_t lastmod, unsigned int flags);&lt;br /&gt;
&lt;br /&gt;
This function is similar to jupe_activate() except that it deactivates&lt;br /&gt;
the jupe.  If the given jupe is local, then the jupe is deleted from&lt;br /&gt;
memory.  In all other cases, the jupe is simply deactivated, either&lt;br /&gt;
locally (if JUPE_LOCAL was passed via _flags_) or globally.  Global&lt;br /&gt;
deactivation will update the _lastmod_ time.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
struct Jupe* jupe_find(char *server);&lt;br /&gt;
&lt;br /&gt;
This function searches for a jupe matching the given _server_.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
void jupe_free(struct Jupe *jupe);&lt;br /&gt;
&lt;br /&gt;
This function releases all storage associated with a given jupe.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
void jupe_burst(struct Client *cptr);&lt;br /&gt;
&lt;br /&gt;
This function generates a burst of all existing global jupes and sends&lt;br /&gt;
them to the server specified by _cptr_.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int jupe_resend(struct Client *cptr, struct Jupe *jupe);&lt;br /&gt;
&lt;br /&gt;
This function resends the _jupe_ to a server specified by _cptr_.&lt;br /&gt;
This may be used if, for instance, it is discovered that a server is&lt;br /&gt;
not synchronized with respect to a particular jupe.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;function&amp;gt;&lt;br /&gt;
int jupe_list(struct Client *sptr, char *server);&lt;br /&gt;
&lt;br /&gt;
This function sends the information about a jupe matching _server_ to&lt;br /&gt;
the client specified by _sptr_.  If _server_ is a NULL pointer, a list&lt;br /&gt;
of all jupes is sent.&lt;br /&gt;
&amp;lt;/function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;authors&amp;gt;&lt;br /&gt;
Kev &amp;lt;klmitch@mit.edu&amp;gt;&lt;br /&gt;
&amp;lt;/authors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;changelog&amp;gt;&lt;br /&gt;
[2001-6-15 Kev] Initial documentation of the jupe API.&lt;br /&gt;
&amp;lt;/changelog&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catgeory:IRCu API|Jupe]]&lt;/div&gt;</description>
			<pubDate>Fri, 25 Apr 2008 04:03:27 GMT</pubDate>			<dc:creator>Secretagent</dc:creator>			<comments>http://wiki.darenet.org/Talk:ircu_api_-_jupe</comments>		</item>
	</channel>
</rss>