예제 #1
0
파일: ass.c 프로젝트: OneDream/faplayer
/**
 * \brief Parse the tail of Dialogue line
 * \param track track
 * \param event parsed data goes here
 * \param str string to parse, zero-terminated
 * \param n_ignored number of format options to skip at the beginning
*/
static int process_event_tail(ASS_Track *track, ASS_Event *event,
                              char *str, int n_ignored)
{
    char *token;
    char *tname;
    char *p = str;
    int i;
    ASS_Event *target = event;

    char *format = strdup(track->event_format);
    char *q = format;           // format scanning pointer

    if (track->n_styles == 0) {
        // add "Default" style to the end
        // will be used if track does not contain a default style (or even does not contain styles at all)
        int sid = ass_alloc_style(track);
        set_default_style(&track->styles[sid]);
        track->default_style = sid;
    }

    for (i = 0; i < n_ignored; ++i) {
        NEXT(q, tname);
    }

    while (1) {
        NEXT(q, tname);
        if (strcasecmp(tname, "Text") == 0) {
            char *last;
            event->Text = strdup(p);
            if (*event->Text != 0) {
                last = event->Text + strlen(event->Text) - 1;
                if (last >= event->Text && *last == '\r')
                    *last = 0;
            }
            ass_msg(track->library, MSGL_DBG2, "Text = %s", event->Text);
            event->Duration -= event->Start;
            free(format);
            return 0;           // "Text" is always the last
        }
        NEXT(p, token);

        ALIAS(End, Duration)    // temporarily store end timecode in event->Duration
        if (0) {            // cool ;)
            INTVAL(Layer)
            STYLEVAL(Style)
            STRVAL(Name)
            STRVAL(Effect)
            INTVAL(MarginL)
            INTVAL(MarginR)
            INTVAL(MarginV)
            TIMEVAL(Start)
            TIMEVAL(Duration)
        }
    }
    free(format);
    return 1;
}
예제 #2
0
void		sort_queue_list(t_list **begin)
{
  t_list	*p;
  t_list	*swap;

  p = *begin;
  while ((*begin)->next)
    {
      if (TIMEVAL(((t_queue*)(*begin)->data)->time)->tv_sec >
	  TIMEVAL(((t_queue*)(*begin)->next->data)->time)->tv_sec
	  || (TIMEVAL(((t_queue*)(*begin)->data)->time)->tv_sec ==
	      TIMEVAL(((t_queue*)(*begin)->next->data)->time)->tv_sec
	      && TIMEVAL(((t_queue*)(*begin)->data)->time)->tv_usec >
	      TIMEVAL(((t_queue*)(*begin)->next->data)->time)->tv_usec))
	{
	  swap = (*begin)->next->data;
	  (*begin)->next->data = (*begin)->data;
	  (*begin)->data = swap;
	  *begin = p;
	}
      else
	*begin = (*begin)->next;
    }
  *begin = p;
}
예제 #3
0
파일: clock.c 프로젝트: coodie/mimiker
#include <callout.h>
#include <sched.h>
#include <timer.h>
#include <sysinit.h>

static timeval_t tick = TIMEVAL(0.001);

static void clock(timer_event_t *tev) {
  systime_t st = tv2st(tev->tev_when);
  tev->tev_when = timeval_add(&tev->tev_when, &tick);
  cpu_timer_add_event(tev);
  callout_process(st);
  sched_clock();
}

static timer_event_t *clock_event = &(timer_event_t){.tev_func = clock};

static void clock_init(void) {
  timeval_t now = get_uptime();
  clock_event->tev_when = timeval_add(&now, &tick);
  cpu_timer_add_event(clock_event);
}

SYSINIT_ADD(clock, clock_init, DEPS("sched", "callout"));
예제 #4
0
void
wifi_pcap_callback(u_char* av, const struct pcap_pkthdr * pkthdr, const u_char * pkt)
{
  ieee80211_header_t mac_header;
  prism2_header_t prism2_header;
  u_int8_t dir, type, subtype;
  ovm_var_t **attr;

  DebugLog(DF_MOD, DS_TRACE, "wifi_pcap_callback()\n");

  attr = (ovm_var_t **) av;

  if (datalink_type == DLT_PRISM_HEADER) {
    prism2_header = (prism2_header_t) pkt;
    mac_header = (ieee80211_header_t) (pkt + 144);

    attr[F_RSSI] = ovm_int_new();
    INT(attr[F_RSSI]) = (&(prism2_header->rssi))->data;
  } else {
      return ;
  }

  /* fixation du champ .wifi.time */
  attr[F_TIME] = ovm_timeval_new();
  attr[F_TIME]->flags |= TYPE_MONO;
  gettimeofday( &(TIMEVAL(attr[F_TIME])) , NULL);

  type = mac_header->fc[0] & 0x0c;
  subtype = mac_header->fc[0] & SUBTYPE_MASK;
  dir = mac_header->fc[1] & DIR_MASK;

  switch (type) {
    /******************** Dans le cas d'une trame de gestion */
    case TYPE_MGT:

      attr[F_TYPE] = ovm_str_new(strlen("management"));
      memcpy(STR(attr[F_TYPE]), "management", STRLEN(attr[F_TYPE]));

      /* fixation du champ .wifi.seqnum */
      attr[F_SEQNUM] = ovm_int_new();
      INT(attr[F_SEQNUM]) = (int) (mac_header->seqnum & SEQ_MASK) \
                               >> SEQ_SHIFT;

      /* addr1 = DA
         addr2 = SA
         addr3 = BSSID */

      GETADDR(mac_header->addr1, attr[F_DA]);
      GETADDR(mac_header->addr2, attr[F_SA]);
      GETADDR(mac_header->addr3, attr[F_BSSID]);

      switch(subtype)
      {
        case SUBTYPE_ASSOC_REQ:
          attr[F_SUBTYPE] = ovm_str_new(strlen("assocreq"));
          memcpy(STR(attr[F_SUBTYPE]), "assocreq", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_ASSOC_RESP:
          attr[F_SUBTYPE] = ovm_str_new(strlen("assocresp"));
          memcpy(STR(attr[F_SUBTYPE]), "assocresp", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_PROBE_REQ:
          attr[F_SUBTYPE] = ovm_str_new(strlen("probereq"));
          memcpy(STR(attr[F_SUBTYPE]), "probereq", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_PROBE_RESP:
          attr[F_SUBTYPE] = ovm_str_new(strlen("proberesp"));
          memcpy(STR(attr[F_SUBTYPE]), "proberesp", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_BEACON:
          attr[F_SUBTYPE] = ovm_str_new(strlen("beacon"));
          memcpy(STR(attr[F_SUBTYPE]), "beacon", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_DISASSOC:
          attr[F_SUBTYPE] = ovm_str_new(strlen("disassoc"));
          memcpy(STR(attr[F_SUBTYPE]), "disassoc", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_AUTH:
          attr[F_SUBTYPE] = ovm_str_new(strlen("auth"));
          memcpy(STR(attr[F_SUBTYPE]), "auth", STRLEN(attr[F_SUBTYPE]));
          break;

        case SUBTYPE_DEAUTH:
          attr[F_SUBTYPE] = ovm_str_new(strlen("deauth"));
          memcpy(STR(attr[F_SUBTYPE]), "deauth", STRLEN(attr[F_SUBTYPE]));
          break;

        default:
          DebugLog(DF_MOD, DS_DEBUG, "unknown_80211_mgmt_subtype_0x%.2x\n", subtype);
          attr[F_SUBTYPE] = ovm_str_new(strlen("unknown_mgmt_subtype"));
          memcpy(STR(attr[F_SUBTYPE]), "unknown_mgmt_subtype", STRLEN(attr[F_SUBTYPE]));
      }  /* end switch(subtype) */

      break;



    /******************** Dans le cas d'une trame de controle */
    case TYPE_CTL:
      attr[F_TYPE] = ovm_str_new(strlen("control"));
      memcpy(STR(attr[F_TYPE]), "control", STRLEN(attr[F_TYPE]));

      switch(subtype)
      {
        case SUBTYPE_RTS:
          attr[F_SUBTYPE] = ovm_str_new(strlen("rts"));
          memcpy(STR(attr[F_SUBTYPE]), "rts", STRLEN(attr[F_SUBTYPE]));

          GETADDR(mac_header->addr1, attr[F_RA]);
          GETADDR(mac_header->addr2, attr[F_TA]);

          break;

        case SUBTYPE_CTS:
          attr[F_SUBTYPE] = ovm_str_new(strlen("cts"));
          memcpy(STR(attr[F_SUBTYPE]), "cts", STRLEN(attr[F_SUBTYPE]));

          GETADDR(mac_header->addr1, attr[F_RA]);

          break;

        case SUBTYPE_ACK:
          attr[F_SUBTYPE] = ovm_str_new(strlen("ack"));
          memcpy(STR(attr[F_SUBTYPE]), "ack", STRLEN(attr[F_SUBTYPE]));

          GETADDR(mac_header->addr1, attr[F_RA]);

          break;

        default:
          DebugLog(DF_MOD, DS_DEBUG, "unknown_80211_ctl_subtype_0x%.2x\n", subtype);
          attr[F_SUBTYPE] = ovm_str_new(strlen("unknown_ctl_subtype"));
          memcpy(STR(attr[F_SUBTYPE]), "unknown_ctl_subtype", STRLEN(attr[F_SUBTYPE]));

      }; /* end switch(subtype) */

      break;



    /******************** Dans le cas d'une trame de donnees */
    case TYPE_DATA:

      attr[F_TYPE] = ovm_str_new(strlen("data"));
      memcpy(STR(attr[F_TYPE]), "data", STRLEN(attr[F_TYPE]));

      /* fixation du champ .wifi.iswep */
      attr[F_ISWEP] = ovm_int_new();
      INT(attr[F_ISWEP]) = (mac_header->fc[1] & PROT) / 64;

      /* fixation du champ .wifi.seqnum */
      attr[F_SEQNUM] = ovm_int_new();
      INT(attr[F_SEQNUM]) = (int) (mac_header->seqnum & SEQ_MASK) \
                               >> SEQ_SHIFT;

      switch(subtype)
      {
        case SUBTYPE_DATA:
          attr[F_SUBTYPE] = ovm_str_new(strlen("data"));
          memcpy(STR(attr[F_SUBTYPE]), "data", STRLEN(attr[F_SUBTYPE]));

          break;
        case SUBTYPE_CF_ACK:
          attr[F_SUBTYPE] = ovm_str_new(strlen("datacfack"));
          memcpy(STR(attr[F_SUBTYPE]), "datacfack", STRLEN(attr[F_SUBTYPE]));

          break;
        case SUBTYPE_CF_POLL:
          attr[F_SUBTYPE] = ovm_str_new(strlen("datacfpoll"));
          memcpy(STR(attr[F_SUBTYPE]), "datacfpoll", STRLEN(attr[F_SUBTYPE]));

          break;
        case SUBTYPE_CF_ACPL:
          attr[F_SUBTYPE] = ovm_str_new(strlen("datacfacpl"));
          memcpy(STR(attr[F_SUBTYPE]), "datacfacpl", STRLEN(attr[F_SUBTYPE]));

          break;
        case SUBTYPE_NODATA:
          attr[F_SUBTYPE] = ovm_str_new(strlen("nodata"));
          memcpy(STR(attr[F_SUBTYPE]), "nodata", STRLEN(attr[F_SUBTYPE]));

          break;

        default:
          DebugLog(DF_MOD, DS_DEBUG, "unknown_80211_data_subtype_0x%.2x\n", subtype);
          attr[F_SUBTYPE] = ovm_str_new(strlen("unknown_data_subtype"));
          memcpy(STR(attr[F_SUBTYPE]), "unknown_data_subtype", STRLEN(attr[F_SUBTYPE]));

      } /* end switch(subtype) */

      switch(dir)
      {
        case DIR_NODS:

          attr[F_DIR] = ovm_str_new(strlen("nods"));
          memcpy(STR(attr[F_DIR]), "nods", STRLEN(attr[F_DIR]));

          attr[F_BODYLENGTH] = ovm_int_new();
          INT(attr[F_BODYLENGTH]) = pkthdr->caplen - 144 - 28 ;

	  /* addr1 = DA
             addr2 = SA
             addr3 = BSSID */

          GETADDR(mac_header->addr1, attr[F_DA]);
          GETADDR(mac_header->addr2, attr[F_SA]);
          GETADDR(mac_header->addr3, attr[F_BSSID]);

          break;


        case DIR_TODS:

          attr[F_DIR] = ovm_str_new(strlen("tods"));
          memcpy(STR(attr[F_DIR]), "tods", STRLEN(attr[F_DIR]));

          attr[F_BODYLENGTH] = ovm_int_new();
          INT(attr[F_BODYLENGTH]) = pkthdr->caplen - 144 - 28 ;

	  /* addr1 = BSSID
             addr2 = SA
             addr3 = DA */

          GETADDR(mac_header->addr1, attr[F_BSSID]);
          GETADDR(mac_header->addr2, attr[F_SA]);
          GETADDR(mac_header->addr3, attr[F_DA]);

          break;


        case DIR_FROMDS:

          attr[F_DIR] = ovm_str_new(strlen("fromds"));
          memcpy(STR(attr[F_DIR]), "fromds", STRLEN(attr[F_DIR]));

          attr[F_BODYLENGTH] = ovm_int_new();
          INT(attr[F_BODYLENGTH]) = pkthdr->caplen - 144 - 28 ;

	  /* addr1 = DA
             addr2 = BSSID
             addr3 = SA */

          GETADDR(mac_header->addr1, attr[F_DA]);
          GETADDR(mac_header->addr2, attr[F_BSSID]);
          GETADDR(mac_header->addr3, attr[F_SA]);

          break;



        case DIR_DSTODS:

          attr[F_DIR] = ovm_str_new(strlen("dstods"));
          memcpy(STR(attr[F_DIR]), "fromds", STRLEN(attr[F_DIR]));

          attr[F_BODYLENGTH] = ovm_int_new();
          INT(attr[F_BODYLENGTH]) = pkthdr->caplen - 144 - 34 ;

	  /* addr1 = RA
             addr2 = TA
             addr3 = DA
             addr4 = SA */

          GETADDR(mac_header->addr1, attr[F_RA]);
          GETADDR(mac_header->addr2, attr[F_TA]);
          GETADDR(mac_header->addr3, attr[F_DA]);
          GETADDR(mac_header->addr4, attr[F_SA]);

          break;

        default: DebugLog(DF_MOD, DS_DEBUG, "unknown_80211_frame_direction_0x%.2x\n", dir);

      } /* end switch(dir) */

      break;

    default: DebugLog(DF_MOD, DS_DEBUG, "unknown_80211_frame_type_0x%.2x\n", type);

  } /* end switch(type) */

}