(require 'cxml) (require 'usocket) (require 'cl-xmlspam) ;; (klacks:with-open-source (s (cxml:make-source #p"s2.xml")) (loop for key = (klacks:peek s) while key do (case key (:start-element (format t "~A {" (klacks:current-qname s))) (:end-element (format t "}"))) (klacks:consume s))) ;; (klacks:with-open-source (s (cxml:make-source (usocket:socket-stream (usocket:socket-connect "victoria.tug.nordu.net" 50001 :element-type '(unsigned-byte 8))) :buffering nil)) (loop for key = (klacks:peek-next s) while key do (case key (:start-document (format t " ")) (:start-element (format t "~A {" (klacks:current-qname s))) (:end-element (format t "}")) (:end-document (format t "~%"))) (klacks:consume s))) ;; (use-package 'xspam) (defparameter *ns* '((urn . "urn:ietf:params:xml:ns:xfb-0.1"))) (defun get-entry-xspam (sock) (with-xspam-source (make-xspam-source sock :buffering nil) (optional (element :bgp_message ;;|bgp_message| (text (format t "~A~%" _)))))) ;; (defun klacks-it (arr) (let ((s (cxml:make-source arr))) (loop for key = (klacks:peek s) while key do (case key ;(:start-document (format t "*** start *** ")) ;(:end-document (format t "*** end ***~%")) (:start-element (format t "~A {" (klacks:current-qname s))) (:end-element (format t "}~%")) (:characters (format t (klacks:current-characters s)))) (klacks:consume s)))) (defun klacks-it2 (arr) (let ((s (cxml:make-source arr))) (do ((key (klacks:peek s) (klacks:peek s))) ((null key)) (case key ;(:start-document (format t "*** start *** ")) ;(:end-document (format t "*** end ***~%")) (:start-element (format t "~A {" (klacks:current-qname s))) (:end-element (format t "}~%")) (:characters (format t (klacks:current-characters s)))) (klacks:consume s)))) ;; (let ((sock (usocket:socket-connect "victoria.tug.nordu.net" 50001 :element-type '(unsigned-byte 8)))) (loop for i from 1 to 5 do (format t "~A: " i) (f (usocket:socket-stream sock)) (format t "~%")) (format t "Closing socket.~%") (usocket:socket-close sock)) ;;;; (defun read-stream-into-list (host port) (let ((reader (new-reader host port)) (xmls-builder (cxml-xmls:make-xmls-builder))) (do ((e (next-xml-blurb reader "BGP_MESSAGE") (next-xml-blurb reader "BGP_MESSAGE"))) ((null e)) (print (cxml:parse e xmls-builder))) (close-reader))) ;; (let ((s nil)) (defun file-reader (fn) (when s (close s)) (setf s (open fn :element-type '(unsigned-byte 8))) (lambda (n) (read-byte s nil))) (defun close-file () (close s))) ;; (defun read-file-into-list (fn) (let ((reader (file-reader fn)) (xmls-builder (cxml-xmls:make-xmls-builder))) (do ((e (next-xml-blurb reader "BGP_MESSAGE") (next-xml-blurb reader "BGP_MESSAGE"))) ((null e)) (print (cxml:parse e xmls-builder))) (close-file))) ;; (next-xml-blurb (new-reader "victoria.tug.nordu.net" 50001) "BGP_MESSAGE") ;;;; Pattern matching using fare-matcher. (require :fare-matcher) (let ((expr '(foo bar))) (letm (list a b) ;pattern expr (list a b))) (let ((expr '(foo kaka bar))) (match expr ((list a b) (list 'plain a b)) ((list a 'kaka b) (list 'cookie a b)))) ;;;; db ;; SQL "select * from bgp_message where timestamp != 0 order by id desc limit 3;" ;; postmodern, lower level ;; http://common-lisp.net/project/postmodern/postmodern.html#querying (query "select count(*) from bgp_message" :single) (doquery (:select 'timestamp 'prefix 'label :from 'bgp-message) (ts pref lbl) (format t "~A ~A ~A~%" ts pref lbl)) ;; postmodern, higher level ;; http://common-lisp.net/project/postmodern/postmodern.html#tabledef (dolist (m (select-dao 'bgp-message (:= 'label "NANN"))) (format t "~A ~A ~A~%" (timestamp m) (prefix m) (label m))) (length (select-dao 'bgp-message))