+/* ---------------------- */
+int afp_getsession(obj, ibuf, ibuflen, rbuf, rbuflen )
+AFPObj *obj;
+char *ibuf, *rbuf;
+unsigned int ibuflen, *rbuflen;
+{
+ u_int16_t type;
+ u_int32_t idlen;
+
+ u_int32_t tklen;
+ pid_t token;
+
+ *rbuflen = 0;
+
+ ibuf++;
+ ibuflen--;
+
+ memcpy(&type, ibuf, sizeof(type));
+ type = ntohs(type);
+ ibuf += sizeof(type);
+ ibuflen -= sizeof(type);
+ /*
+ *
+ */
+ switch (type) {
+ case 0: /* old version ?*/
+ break;
+ case 1: /* disconnect */
+ case 2: /* reconnect update id */
+ if (ibuflen >= sizeof(idlen)) {
+ memcpy(&idlen, ibuf, sizeof(idlen));
+ idlen = ntohl(idlen);
+ ibuf += sizeof(idlen);
+ ibuflen -= sizeof(idlen);
+ if (ibuflen < idlen) {
+ return AFPERR_PARAM;
+ }
+ /* memcpy (id, ibuf, idlen) */
+ }
+ break;
+ }
+ *rbuflen = sizeof(type);
+ type = htons(type);
+ memcpy(rbuf, &type, sizeof(type));
+ rbuf += sizeof(type);
+
+ *rbuflen += sizeof(tklen);
+ tklen = htonl(sizeof(pid_t));
+ memcpy(rbuf, &tklen, sizeof(tklen));
+ rbuf += sizeof(tklen);
+
+ *rbuflen += sizeof(pid_t);
+ token = getpid();
+ memcpy(rbuf, &token, sizeof(pid_t));
+ return AFP_OK;
+}
+
+/* ---------------------- */
+int afp_disconnect(obj, ibuf, ibuflen, rbuf, rbuflen )