From df7638b302622c3df7dab67c966e6ea3498c83e6 Mon Sep 17 00:00:00 2001 From: "gasperfele@fri1.uni-lj.si" Date: Mon, 9 Mar 2015 08:01:29 +0000 Subject: finished, not tested task and task_check for vlc_stream_rtp. git-svn-id: https://svn.lusy.fri.uni-lj.si/kpov-public-svn/kpov-public@285 5cf9fbd1-b2bc-434c-b4b7-e852f4f63414 --- kpov_judge/kpov_random_helpers.py | 7 ++++--- kpov_judge/tasks/vlc_stream_rtp/task.py | 32 +++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/kpov_judge/kpov_random_helpers.py b/kpov_judge/kpov_random_helpers.py index d26c5c6..9775224 100755 --- a/kpov_judge/kpov_random_helpers.py +++ b/kpov_judge/kpov_random_helpers.py @@ -59,15 +59,16 @@ def IPv4_net_gen(r, min_hosts=254, local=True, multicast=False): '172.16.0.0/12']) if multicast: if local: - net = "239.0.0.0/8" + net = "239.255.0.0/16" else: net = "224.0.0.0/4" return IPv4_subnet_gen(r, net, mask) -def IPv4_addr_gen(r, network, n_generated=1): +def IPv4_addr_gen(r, network, n_generated=1, reserve_top=1, reserve_bottom=1): net, mask = _net_to_int(network) hosts = [] - l = r.sample(xrange(1, 2**(32 - mask)-1), n_generated) + l = r.sample(xrange(reserve_bottom, + 2**(32 - mask)-reserve_top), n_generated) for i in l: hosts.append(socket.inet_ntoa(struct.pack('>I', net | i))) return hosts diff --git a/kpov_judge/tasks/vlc_stream_rtp/task.py b/kpov_judge/tasks/vlc_stream_rtp/task.py index 12c0c53..76c1589 100644 --- a/kpov_judge/tasks/vlc_stream_rtp/task.py +++ b/kpov_judge/tasks/vlc_stream_rtp/task.py @@ -11,7 +11,7 @@ Postavi navidezni računalnik SimpleArbiter z diska simpleArbiter. Posodobi dato preveri za posodobitve in naloži VLC. Posnemi ali kako drugače ustvari film ter poskrbi, da bo film dostopen na lokalnem omrežju prek RTP z imenom toka TOK na naslovu NASLOV. Računaj, da bodo film lahko videli tvoji sošolci. Kršenje avtorskih pravic je pri reševanju te naloge strogo prepovedano. -""" +""", 'en':u""" Set up a virtual computer SimpleArbiter from the simpleArbiter disk. Read a movie title and stream name for stream TOK onto simpleArbiter. Film or @@ -44,31 +44,45 @@ networks = { 'test-net': {'public': True} } params_meta = { 'NASLOV': {'descriptions': {'si': 'RTP multicast IP naslov'}, 'w': False, 'public':True, 'type': 'stream_name', 'generated': True}, - 'TOK': {'descriptions': {'si': 'Naslov toka'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True}, + 'PORT': {'descriptions': {'si': 'RTP VRATA'}, 'w': False, 'public':True, 'type': 'port', 'generated': True}, + 'TOK': {'descriptions': {'si': 'Naslov (ime) toka'}, 'w': False, 'public':True, 'type': 'IP', 'generated': True}, } def task(NASLOV, TOK): import pexpect - # sA - # make sure NM is not handling eth0 - # sB - # check whether NM is handling eth0 + results = dict() results['ps'] = pexpect.run('ps xa') - results['tcpdump'] = pexpect.run('tcpdump') + results['tcpdump_hex'] = pexpect.run('sudo /usr/sbin/tcpdump -x -c 2 dst host 239.255.255.255 and port 9875'.format(NASLOV)) + results['tcpdump'] = pexpect.run('sudo /usr/sbin/tcpdump -c 8 dst host {}'.format(NASLOV)) return results def gen_params(user_id, params_meta): params = dict() r = random.Random(user_id) net = kpov_random_helpers.IPv4_net_gen(r, min_hosts = 16, - public=True, multicast=True) + local=True, multicast=True) params['NASLOV'] = kpov_random_helpers.IPv4_addr_gen(r, net, 1)[0] + params['PORT'] = str(r.randint(5000, 6000)) params['TOK'] = kpov_random_helpers.hostname_gen(r) return params def task_check(results, params): import re - print results + packs = results['tcpdump_hex'].split('> 239.255.255.255.9875: UDP, length') + p1 = packs[1] + p1_l = p1.split('\n') + p1_d = p1_l[1:-1] + p1_s = "" + for i in p1_d: + p1_s += "".join([j for j in i.split(' ')[1:]]) + sname = "".join([ hex(ord(i))[2:] for i in params['TOK']]) + if p1_s.find(sname) > 2: + score += 5 + s = "IP [^ ]* > {}.{}: UDP, length [0-9]+\n\r".format( + re.escape(params['NASLOV']), + params['PORT']) + if re.search(s, results['tcpdump']): + score += 5 return score def prepare_disks(templates, params): -- cgit v1.2.1